Hadoop生態圈開源項目總結

一.Hadoop總結
1.HDFS shell
1.0查看幫助
hadoop fs -help <cmd>
1.1上傳
hadoop fs -put <linux上文件> <hdfs上的路徑>
1.2查看文件內容
hadoop fs -cat <hdfs上的路徑>
1.3查看文件列表
hadoop fs -ls /
1.4下載文件
hadoop fs -get <hdfs上的路徑> <linux上文件>
1.5刪除文件
hadoop fs -rmr <hdfs上的路徑>
1.6創建文件夾
hadoop fs -mkdir /dirname


2.HDFS源碼分析
FileSystem.get --> 通過反射實例化了一個DistributedFileSystem --> new DFSCilent()把他作爲自己的成員變量
在DFSClient構造方法裏面,調用了createNamenode,使用了RPC機制,得到了一個NameNode的代理對象,就可以和NameNode進行通信了
FileSystem --> DistributedFileSystem --> DFSClient --> NameNode的代理
3.MR執行流程
(1).客戶端提交一個mr的jar包給JobClient
(2).JobClient通過RPC和JobTracker進行通信,返回一個存放jar包的地址(HDFS)和jobId
(3).client將jar包寫入到HDFS當中
(4).開始提交任務(任務的描述信息,不是jar)
(5).JobTracker進程初始化任務
(6).讀取HDFS上的要處理的文件,開始計算輸入分片,每一個分片對應一個MapperTask
(7).TaskTracker通過心跳機制領取任務
(8).下載所需的jar,配置文件等
(9).TaskTracker啓動一個java child進程,用來執行具體的任務(MapperTask或ReducerTask)
(10).將結果寫入到HDFS當中
4.maptask分片
片大小:splitSize = max(minsize,min(maxsize,blockSize));
minsize:mapred.min.split.size(配置文件中設置默認沒設置)
maxsize:mapred.max.split.size(配置文件中設置默認long類型的最大值263-1)
默認一般一個block塊對應一個map的分片(有些文件進行壓縮後不支持分塊,上傳到hdfs也是一塊不會被拆分)
如果想多個map分片對應一個分塊就要設置mapred.max.split.size
5.hadoop集羣的6個配置文件
第一個:hadoop-env.sh 
export JAVA_HOME=/usr/java/jdk1.6.0_45

第二個:core-site.xml
<!-- 指定HDFS的namenode的通信地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存放目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/cloud/hadoop-1.1.2/tmp</value>
</property>

第三個:hdfs-site.xml
<!-- 配置HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

第四個:mapred-site.xml
<!-- 指定jobtracker地址 -->
<property>
<name>mapred.job.tracker</name>
<value>hadoop01:9001</value>
</property>

第五個:masters(指定secondarynamenode地址)
hadoop01

第六個:slaves
hadoop02
hadoop03 
6.動態添加一臺節點
6.1修改主機名 vim /etc/sysconfig/network
6.2使用root用戶登錄,右鍵點擊右上角網絡,選擇Edit connections,修改Auto eth1,設置爲manual方式,添加IP,NETMASK,GAYEWAY,再點apply
6.3關閉防火牆 service iptables stop ;chkconfig iptables off 重啓機器:reboot
6.4配置主節點和新添加節點的hosts文件
6.5分別啓動datanode和tasktracker
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
6.6在主節點上即namenode所在節點上運行命令刷新
hadoop dfsadmin -refreshNodes
7.hadoop集羣管理相關命令
hadoop安全模式:Safe mode is ON(可以讀取文件,但是不可以向HDFS寫入文件)
hadoop dfsadmin -safemode enter(進入安裝器模式) / leave(離開安全模式) / get(獲取當前狀態) / wait(竟然等待狀態)
hadoop mradmin -safemode enter / leave / get / wait 

二.配置mysql遠程連接
GRANT ALL PRIVILEGES ON database.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
三.Sqoop總結
注:將數據庫連接驅動拷貝到$SQOOP_HOME/lib裏
第一類:sqoop和hdfs交互
數據庫中的數據導入到HDFS上
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --columns 'id, account, income, expenses'
指定輸出路徑、指定數據分隔符
sqoop import --connect jdbc:mysql://192.168.35.100:3306/database --username root --password 123  --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'
指定Map數據 -m 
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2
增加where條件, 注意:條件必須用引號引起來
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --where 'id>3' --target-dir '/sqoop/td2' 
增加query語句(使用 \ 將語句換行)
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3'

注意:如果使用--query這個命令的時候,需要注意的是where後面的參數,AND $CONDITIONS這個參數必須加上
而且存在單引號與雙引號的區別,如果--query後面使用的是雙引號,那麼需要在$CONDITIONS前加上\即\$CONDITIONS
如果設置map數量爲1個時即-m 1,不用加上--split-by ${tablename.column},否則需要加上
將HDFS上的數據導出到數據庫中(結尾的-m 1設置執行的map個數爲1)
sqoop export --connect jdbc:mysql://192.168.8.120:3306/database --username root --password 123 --export-dir '/td3' --table td_bak -m 1
第二類:sqoop和hive交互
sqoop import --connect jdbc:mysql://192.168.35.100:3306/database --username root --password 123 --table user_info --hive-import --hive-overwrite --hive-table user_info --fields-terminated-by '\t'
四.ZooKeeper總結
1.應用場景(簡單介紹7個場景)
數據發佈與訂閱(配置中心)、負載均衡、命名服務、分佈式通知/協調、集羣管理與Master選舉、分佈式鎖、分佈式隊列
2.zk要部署奇數個
3.注意事項(特別要注意,否則啓動報錯)
在(dataDir=/cloud/zookeeper-3.4.5/tmp)創建一個myid文件,裏面內容是server.N中的N(server.2裏面內容爲2)
echo "1" > myid
將配置好的zk拷貝到其他節點在其他節點上一定要修改myid的內容
在hadoop02應該講myid的內容改爲2 (echo "2" > myid)
在hadoop03應該講myid的內容改爲3 (echo "3" > myid)
五.HBase總結
簡介:
建立的hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的數據庫系統。它介於nosql和RDBMS之間,僅能通過主鍵(row key)
和主鍵的range來檢索數據,僅支持單行事務(可通過hive支持來實現多表join等複雜操作)。主要用來存儲非結構化和半結構化的鬆散數據。
與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。
HBase中的表一般有這樣的特點:
1) 大:一個表可以有上億行,上百萬列
2) 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。
3) 稀疏:對於爲空(null)的列,並不佔用存儲空間,因此,表可以設計的非常稀疏。
1.HBase啓動順序
啓動hadfs start-dfs.sh -->啓動zk zkServer.sh start --> 啓動hbase start-hbase.sh -->啓動第二個hbase master: hbase-daemon.sh start master
2.不要忘記修改hbase-env.sh
export HBASE_MANAGES_ZK=false //告訴hbase使用外部的zk
六.Flume總結
配置HDFS Sink時首先需要將$HADOOP_HOME/hadoop-core-1.0.4.jar和$HADOOP_HOME/lib/commons-configuration-1.6.jar拷貝到$FLUME_HOME/lib/下
啓動(切換到flume的安裝路徑下啓動)
#將日誌信息打印到控制檯
bin/flume-ng agent -n agent -c conf -f conf/flume-conf.properties -Dflume.root.logger=INFO,console
#將產生的日誌信息保存到日誌文件中,並後臺運行
bin/flume-ng agent -n agent -c conf -f conf/flume-conf.properties >logs/flume_log.log &
七.hive的總結就不贅述了,專門寫了博文進行介紹









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章