hadoop系列安裝小記

原文3年多前發(fā)表在私人站點,現(xiàn)遷移到簡書

當時裝的是5.1.0格了,現(xiàn)在最新的版本是5.4.2看铆,因為有在線業(yè)務使用,所以暫時不升級笆搓。

cdh

獨立下載hadoop各個組件再安裝比較繁瑣(hdfs+yarn+hbsae+zk+hive)性湿,沒有選好版本可能會沖突,CDH的版本都是選定好的满败,安裝和升級文檔齊全,非常方便

安裝前配置

官方流程 大致分一下3個步驟:

配置yum源

wget http://archive.cloudera.com/cdh5/one-click-install/redhat/5/x86_64/cloudera-cdh-5-0.x86_64.rpm

sudo yum --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm  #安裝rpm,會加一個clouder的yum源:

yum clean all 算墨、 yum makecache # 重新構建yum緩存

sudo rpm --import http://archive.cloudera.com/cdh5/redhat/5/x86_64/cdh/RPM-GPG-KEY-cloudera #導入GPG驗證的key

* 可能的問題:

1.運行yum的可能遇到錯誤:

It's possible that the above module doesn't match the current version of Python, which is:2.7.3 (default, May 19

2014, 15:04:50) [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]

需要修改yum的python依賴版本:

修改文件: vim /usr/bin/yum

修改頭#!/usr/bin/python  => #!/usr/bin/python2.4

2.找不到host命令宵荒,需要裝下bind-utils:yum install bind-utils

安裝jdk

yum -y install unzip

curl -L -s get.jenv.io | bash

source /home/admin/.jenv/bin/jenv-init.sh

jenv install java 1.7.0_45

jdk通過USER賬號安裝,cdh系列的需要在自己的特定賬號下執(zhí)行净嘀,比如hdfs賬號报咳,所以會出現(xiàn)找不到JAVA_HOME的問題,解決方法:

  • 在/etc/sudoers 配置:Defaults env_keep+=JAVA_HOME

  • 設置ROOT下的JAVA_HOME指向USER。挖藏。暑刃,需要修改USER為可執(zhí)行權限

  • 還有另一個方法,是在/etc/default/bigtop-utils 下配置javahome(chmod 755 /home/USER)


export JAVA_HOME=/home/USER/.jenv/candidates/java/current

chmod 755 /home/USER/

HDFS

安裝和配置

NameNode膜眠、Client


sudo yum install hadoop-hdfs-namenode

sudo yum install hadoop-client

安裝DataNode


在DataNode機器上執(zhí)行:

sudo yum install hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce

設置hdfs config文件到自己的目錄下

sudo cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.my_cluster

sudo /usr/sbin/alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50

sudo /usr/sbin/alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

sudo chmod -R 777 /etc/hadoop/conf.my_cluster

(alternatives --config java好像無效)

創(chuàng)建數(shù)據(jù)目錄(用戶組hdfs:hdfs 權限700):

datanode:sudo mkdir -p /data/hadoop/hdfs/dn

sudo chown -R hdfs:hdfs /data/hadoop

hadoop-env.sh

hadoop默認為namenode岩臣、datanode都是1G的內存:

export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -Xmx3072m -verbose:gc -Xloggc:/var/log/hadoop-hdfs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -Xmx2048m -verbose:gc -Xloggc:/var/log/hadoop-hdfs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

core-site.xml

<property>
<!-- namenode地址和端口 -->
 <name>fs.defaultFS</name>
 <value>hdfs://cdhhadoop1:8020</value>
</property>
<!-- 回收站,默認保留一天 -->
<property>
 <name>fs.trash.interval</name>
 <value>1440</value>
</property>
<property>
 <name>fs.trash.checkpoint.interval</name>
 <value>0</value>
</property>
<!-- 配置Snappy壓縮 -->
 <property>
  <name>io.compression.codecs</name>
 <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

配置hdfs-site.xml

<!-- 超級用戶 -->
<property>
   <name>dfs.permissions.superusergroup</name>
   <value>admin</value>
</property>
<!-- hdfs副本 -->
<property>
   <name>dfs.replication</name>
   <value>2</value>
</property>
<!-- dfs.namenode.name.dir 作為namenode存放元信息的目錄宵膨,如果設置多個則會有一個拷貝架谎,可以在另外一臺機器上搭一個NFS共享目錄,作為備份 ->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/hadoop/hdfs/nn</value>
  </property>
  <property>
     <name>dfs.datanode.data.dir</name>
     <value>/data/hadoop/hdfs/dn</value>
  </property>
  • 其他配置:

1.如果datanode的目錄有一個寫失敗辟躏,DataNode就會停止谷扣,這樣這個DataNode上的所有目錄的副本都會增加,如果要避免這種情況捎琐,可以設置容忍失敗的目錄個數(shù)

2.可以配置負載均衡会涎,默認的分配策略是隨機的,可以配置一個策略比如磁盤大小

3.沒有配置web hdfs

啟動

  • 格式化namenode
sudo -u hdfs hdfs namenode -format
日志文件目錄:/var/log/hadoop-hdfs
  • 啟動namenode
sudo service hadoop-hdfs-namenode start
  • 啟動datanode
sudo service hadoop-hdfs-datanode start
  • 初始化

hdfs運行以后瑞凑,推薦在hdfs上創(chuàng)建tmp目錄末秃,并設置權限:

$ sudo -u hdfs hadoop fs -mkdir /tmp
$ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp

測試

http://localhost:50070/dfshealth.html#tab-overview

簡單的測試只要執(zhí)行下hadoop fs命令即可,如果要測試讀寫性能拨黔,要等mapreduce裝好


【寫性能測試】

hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-test.jar  TestDFSIO -write -nrFiles 10 -fileSize 1000

我們集群的一次測試結果:

----- TestDFSIO ----- : write

          Date & time: Sun Jul 13 21:40:41 CST 2014

      Number of files: 10

Total MBytes processed: 10000.0(總共10個文件蛔溃,每個1G)

    Throughput mb/sec: 6.452312250618132(總大小/Map總時間)

Average IO rate mb/sec: 6.50354528427124

IO rate std deviation: 0.6099282285067701

Test exec time sec: 197.818(整體執(zhí)行時間)

Throughput是總大小文/每個Map時間之和,如果算并發(fā)吞吐量的話篱蝇,可以乘以Map數(shù)量贺待,詳細解讀可以參考:Benchmarking and Stress Testing an Hadoop Cluster With TeraSort, TestDFSIO & Co


【讀性能測試】

hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-test.jar  TestDFSIO -read -nrFiles 10 -fileSize 1000

20:38:21 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read

20:38:21 INFO fs.TestDFSIO:  Date & time: Tue Jul 15 20:38:21 CST 2014

20:38:21 INFO fs.TestDFSIO:        Number of files: 10

20:38:21 INFO fs.TestDFSIO: Total MBytes processed: 10000.0

20:38:21 INFO fs.TestDFSIO:      Throughput mb/sec: 16.79261125104954

20:38:21 INFO fs.TestDFSIO: Average IO rate mb/sec: 16.829221725463867

20:38:21 INFO fs.TestDFSIO:  IO rate std deviation: 0.8154139285912413

20:38:21 INFO fs.TestDFSIO:    Test exec time sec: 84.614

測試結果以后需要清理測試結果

hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-test.jar  TestDFSIO -clean

在windows看客戶端下測試Hdfs,需要到

https://github.com/srccodes/hadoop-common-2.2.0-bin 下載并替換hadoopHome下的bin目錄

YARN

安裝和配置


sudo yum install hadoop-yarn-resourcemanager

sudo yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver

sudo mkdir -p /data/yarn/local

sudo mkdir -p /data/yarn/logs

sudo chown -R yarn:yarn /data/yarn

hadoop fs -mkdir -p /user/history

hadoop fs -chmod -R 1777 /user/history

hadoop fs -chown mapred:hadoop /user/history

yarn-site.xml

<configuration>
   <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>cdhhadoop1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>cdhhadoop1:8088</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <description>List of directories to store localized files in.</description>
    <name>yarn.nodemanager.local-dirs</name>
    <value>file:///data/yarn/local</value>
  </property>
  <property>
    <description>Where to store container logs.</description>
    <name>yarn.nodemanager.log-dirs</name>
    <value>file:///data/yarn/logs</value>
  </property>
  <property>
    <description>Where to aggregate logs to.</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>hdfs:///log/yarn/apps</value>
  </property>
  <property>
    <description>Classpath for typical applications.</description>
     <name>yarn.application.classpath</name>
     <value>
        $HADOOP_CONF_DIR,
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
        $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
     </value>
  </property>

啟動

  • 端口
resourceManager 8088/cluster
nodeManager  8042/node
JobHistory  19888/jobhistory
Name:http://localhost:8088/cluster/nodes
Node1:http://localhost:8042/node
Node2:http://localhost:8043/node

測試

通過hadoop自帶的randowmwriter測試下:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter out

21:14:34 INFO mapreduce.Job: Job job_1405247153654_0004 completed successfully
21:14:34 INFO mapreduce.Job: Counters: 33

        File System Counters

                FILE: Number of bytes read=0

                FILE: Number of bytes written=1772230

                FILE: Number of read operations=0

                FILE: Number of large read operations=0

                FILE: Number of write operations=0

                HDFS: Number of bytes read=2350

                HDFS: Number of bytes written=21545727074(寫入20G)

                HDFS: Number of read operations=80

                HDFS: Number of large read operations=0

                HDFS: Number of write operations=40

        Job Counters

                Killed map tasks=10

                Launched map tasks=30

                Other local map tasks=30

                Total time spent by all maps in occupied slots (ms)=7247472

                Total time spent by all reduces in occupied slots (ms)=0

                Total time spent by all map tasks (ms)=7247472

                Total vcore-seconds taken by all map tasks=7247472

                Total megabyte-seconds taken by all map tasks=7421411328

        Map-Reduce Framework

                Map input records=20

                Map output records=2043801

                Input split bytes=2350

                Spilled Records=0

                Failed Shuffles=0

                Merged Map outputs=0

                GC time elapsed (ms)=8157

                CPU time spent (ms)=641440

                Physical memory (bytes) snapshot=2889732096

                Virtual memory (bytes) snapshot=14388494336

                Total committed heap usage (bytes)=2371878912

        org.apache.hadoop.examples.RandomWriter$Counters

                BYTES_WRITTEN=21475013178

                RECORDS_WRITTEN=2043801

        File Input Format Counters

                Bytes Read=0

        File Output Format Counters

                Bytes Written=21545727074

The job took 604 seconds.

ZK

安裝和配置

安裝


sudo yum install zookeeper

sudo yum install zookeeper-server

拷貝配置


sudo cp -r /etc/zookeeper/conf.dist /etc/zookeeper/conf.my_cluster

sudo alternatives --verbose --install /etc/zookeeper/conf zookeeper-conf /etc/zookeeper/conf.my_cluster 50

sudo alternatives --set zookeeper-conf /etc/zookeeper/conf.my_cluster

修改配置文件并在節(jié)點間同步


/etc/zookeeper/conf.my_cluster/zoo.cfg

server.1=A:2888:3888

server.2=B:2888:3888

server.3=C:2888:3888

創(chuàng)建數(shù)據(jù)目錄


mkdir -p /data/zookeeper

chown -R zookeeper:zookeeper /data/zookeeper

啟動


啟動日志在/var/log/zookeeper

在A運行 :

$ service zookeeper-server init --myid=1

$ service zookeeper-server start

在B運行

$ service zookeeper-server init --myid=2

$ service zookeeper-server start

在C運行

$ service zookeeper-server init --myid=3

$ service zookeeper-server start

測試


zookeeper-client -server A:2181

zookeeper-client -server B:2181

目錄列表: ls /

創(chuàng)建目錄: create /test "empty"

HBase

安裝和配置

安裝


所有機器上: sudo yum install hbase

NameNode:sudo yum install hbase-master

DataNode: sudo yum install hbase-regionserver

拷貝自己的配置文件


sudo cp -r /etc/hbase/conf.dist /etc/hbase/conf.my_cluster

sudo alternatives --verbose --install /etc/hbase/conf hbase-conf /etc/hbase/conf.my_cluster 50

sudo alternatives --set hbase-conf /etc/hbase/conf.my_cluster

修改最大文件數(shù)限制


避免Too many open files(/etc/security/limits.conf)

hdfs  -      nofile  32768

hbase -      nofile  32768

阿里云機器默認已經(jīng)是65535零截,所以不做修改

hdfs DataNode會限制打開的文件數(shù)( /etc/hadoop/conf/hdfs-site.xml)

  dfs.datanode.max.xcievers

  65535

創(chuàng)建目錄


hadoop fs -mkdir /hbase

hadoop fs -chown hbase /hbase

hbase-site.xml

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://myhost:8020/hbase</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
    <value>A,B,C</value>
</property>
<!--關閉checksum-->
<property>
    <name>hbase.regionserver.checksum.verify</name>
    <value>false</value>
    <description>
        If set to  true, HBase will read data and then verify checksums  for
        hfile blocks. Checksum verification inside HDFS will be switched off.
        If the hbase-checksum verification fails, then it will  switch back to
        using HDFS checksums.
    </description>
  </property>
<property>
    <name>hbase.hstore.checksum.algorithm</name>
    <value>NULL</value>
    <description>
      Name of an algorithm that is used to compute checksums. Possible values
      are NULL, CRC32, CRC32C.
    </description>
  </property>

啟動


service hbase-master start

service hbase-regionserver start

測試


60010是master的端口 http://localhost:60010/master-status?filter=all

60030是regionServer的端口

測試hbase集群是否支持snappy:

hbase org.apache.hadoop.hbase.util.CompressionTest hdfs://namenode:8020/benchmarks/hbase snappy

通過hbase shell訪問hbase

Hive

安裝和配置

安裝hive/metastore/hieveserver


sudo yum install -y hive

sudo yum install -y hive-metastore

sudo yum install -y hive-server2

mysql-connector-java.jar


在metastore的機器麸塞,把mysql-connector-java.jar放到/usr/lib/hive/lib/目錄下

java堆配置

我們配置的是3G


官方文檔有誤,實際配置文件是:/etc/hive/conf/hive-env.sh

if [ "$SERVICE" = "hiveserver2或者metastore" ]; then

  export HADOOP_OPTS="${HADOOP_OPTS} -Xmx3072m -Xms1024m -Xloggc:/var/log/hive/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

fi

export HADOOP_HEAPSIZE=512

metastore配置(配置文件:hive-site.xml)

參考

metastore 配置hdfs


先初始化下hdfs得配置,再從namenode把最新的配置拷過來:scp /etc/hadoop/conf.my_cluster/hdfs-site.xml /etc/hadoop/conf.my_cluster/core-site.xml host:/etc/hadoop/conf.my_cluster/

hiveserver2配置(配置文件:/etc/hive/conf/hive-site.xml)

主要是配置metastore地址涧衙,zk地址


  hive.support.concurrency

  Enable Hive's Table Lock Manager Service

  true

  hive.zookeeper.quorum

  Zookeeper quorum used by Hive's Table Lock Manager

  A,B,C

  hive.metastore.local

  false

  hive.metastore.uris

  thrift://xxxxx:9083

啟動


sudo /sbin/service hive-metastore start

sudo /sbin/service hive-server2 start

測試

  • 1./usr/lib/hive/bin/beeline

  • 2.!connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver

    或者: !connect jdbc:hive2://10.241.52.161:10000 username password org.apache.hive.jdbc.HiveDriver

  • 3.show tables;

hive服務端日志在:/var/log/hive

hive shell日志在/tmp/admin/hive.log哪工,之前有個配置錯誤引起的異常,一直沒找到日志弧哎,原來路徑是在/etc/hive/conf下的log4j配置的

參考

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末雁比,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撤嫩,更是在濱河造成了極大的恐慌偎捎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件序攘,死亡現(xiàn)場離奇詭異茴她,居然都是意外死亡,警方通過查閱死者的電腦和手機程奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門丈牢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞄沙,你說我怎么就攤上這事己沛。” “怎么了帕识?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵泛粹,是天一觀的道長。 經(jīng)常有香客問我肮疗,道長晶姊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任伪货,我火速辦了婚禮们衙,結果婚禮上,老公的妹妹穿的比我還像新娘碱呼。我一直安慰自己蒙挑,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布愚臀。 她就那樣靜靜地躺著忆蚀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馋袜,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天男旗,我揣著相機與錄音,去河邊找鬼欣鳖。 笑死察皇,一個胖子當著我的面吹牛,可吹牛的內容都是我干的泽台。 我是一名探鬼主播什荣,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怀酷!你這毒婦竟也來了稻爬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜕依,失蹤者是張志新(化名)和其女友劉穎因篇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笔横,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡竞滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吹缔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片商佑。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厢塘,靈堂內的尸體忽然破棺而出茶没,到底是詐尸還是另有隱情,我是刑警寧澤晚碾,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布抓半,位于F島的核電站,受9級特大地震影響格嘁,放射性物質發(fā)生泄漏笛求。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一糕簿、第九天 我趴在偏房一處隱蔽的房頂上張望探入。 院中可真熱鬧,春花似錦懂诗、人聲如沸蜂嗽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽植旧。三九已至辱揭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間病附,已是汗流浹背界阁。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胖喳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓贮竟,卻偏偏與公主長得像丽焊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咕别,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容