使用yum安装CDH Hadoop集群
使用yum安裝CDH Hadoop集群?2013.04.06
Update:
- 2014.07.21?添加 lzo 的安裝
- 2014.05.20?修改cdh4為cdh5進行安裝。
- 2014.10.22?添加安裝 cdh5.2 注意事項。
- 1、cdh5.2?發布了,其中 YARN 的一些配置參數做了修改,需要特別注意。
- 2、Hive 的元數據如果使用 PostgreSql9.X,需要設置?standard_conforming_strings?為 off
環境
- CentOS 6.4 x86_64
- CDH 5.2.0
- jdk1.6.0_31
集群規劃為3個節點,每個節點的ip、主機名和部署的組件分配如下:
192.168.56.121 cdh1 NameNode、Hive、ResourceManager、HBase192.168.56.122 cdh2 DataNode、SSNameNode、NodeManager、HBase192.168.56.123 cdh3 DataNode、HBase、NodeManager1. 準備工作
安裝 Hadoop 集群前先做好下面的準備工作,在修改配置文件的時候,建議在一個節點上修改,然后同步到其他節點,例如:對于 hdfs 和 yarn ,在 NameNode 節點上修改然后再同步,對于 HBase,選擇一個節點再同步。因為要同步配置文件和在多個節點啟動服務,建議配置 ssh 無密碼登陸。
1.1 配置hosts
CDH 要求使用 IPv4,IPv6 不支持。
禁用IPv6方法:
$ vim /etc/sysctl.conf #disable ipv6 net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1使其生效:
$ sysctl -p最后確認是否已禁用:
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 11、設置hostname,以cdh1為例
$ hostname cdh12、確保/etc/hosts中包含ip和FQDN,如果你在使用DNS,保存這些信息到/etc/hosts不是必要的,卻是最佳實踐。
3、確保/etc/sysconfig/network中包含hostname=cdh1
4、檢查網絡,運行下面命令檢查是否配置了hostname以及其對應的ip是否正確。
運行uname -a查看hostname是否匹配hostname命令運行的結果:
$ uname -a Linux cdh1 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux $ hostname cdh1運行/sbin/ifconfig查看ip:
$ ifconfig eth1 Link encap:Ethernet HWaddr 08:00:27:75:E0:95 inet addr:192.168.56.121 Bcast:192.168.56.255 Mask:255.255.255.0 ......先安裝bind-utils,才能運行host命令:
$ yum install bind-utils -y運行下面命令查看hostname和ip是否匹配:
$ host -v -t A `hostname` Trying "cdh1" ... ;; ANSWER SECTION: cdh1. 60 IN A 192.168.56.1215、hadoop的所有配置文件中配置節點名稱時,請使用hostname和不是ip
1.2 關閉防火墻
$ setenforce 0 $ vim /etc/sysconfig/selinux #修改SELINUX=disabled清空iptables
$ iptables -F1.3 時鐘同步
搭建時鐘同步服務器
這里選擇 cdh1 節點為時鐘同步服務器,其他節點為客戶端同步時間到該節點。、
安裝ntp:
$ yum install ntp修改 cdh1 上的配置文件?/etc/ntp.conf?:
restrict default ignore?? //默認不允許修改或者查詢ntp,并且不接收特殊封包 restrict 127.0.0.1??????? //給于本機所有權限 restrict 192.168.56.0 mask 255.255.255.0 notrap nomodify? //給于局域網機的機器有同步時間的權限 server? 192.168.56.121???? # local clock driftfile /var/lib/ntp/drift fudge?? 127.127.1.0 stratum 10啟動 ntp:
$ service ntpd start設置開機啟動:
$ chkconfig ntpd onntpq用來監視ntpd操作,使用標準的NTP模式6控制消息模式,并與NTP服務器通信。
ntpq -p?查詢網絡中的NTP服務器,同時顯示客戶端和每個服務器的關系。
$ ntpq -premote refid st t when poll reach delay offset jitter ============================================================================== *LOCAL(1) .LOCL. 5 l 6 64 1 0.000 0.000 0.000- "* ":響應的NTP服務器和最精確的服務器。
- "+":響應這個查詢請求的NTP服務器。
- "blank(空格)":沒有響應的NTP服務器。
- "remote" :響應這個請求的NTP服務器的名稱。
- "refid ":NTP服務器使用的更高一級服務器的名稱。
- "st":正在響應請求的NTP服務器的級別。
- "when":上一次成功請求之后到現在的秒數。
- "poll":當前的請求的時鐘間隔的秒數。
- "offset":主機通過NTP時鐘同步與所同步時間源的時間偏移量,單位為毫秒(ms)。
客戶端的配置
在cdh2和cdh3節點上執行下面操作:
$ ntpdate cdh1Ntpd啟動的時候通常需要一段時間大概5分鐘進行時間同步,所以在ntpd剛剛啟動的時候還不能正常提供時鐘服務,報錯"no server suitable for synchronization found"。啟動時候需要等待5分鐘。
如果想定時進行時間校準,可以使用crond服務來定時執行。
00 1 * * * root /usr/sbin/ntpdate 192.168.56.121 >> /root/ntpdate.log 2>&1這樣,每天 1:00 Linux 系統就會自動的進行網絡時間校準。
1.4 安裝jdk
以下是手動安裝jdk,你也可以通過yum方式安裝,見下文。
檢查jdk版本
$ java -version如果其版本低于v1.6 update 31,則將其卸載
$ rpm -qa | grep java $ yum remove {java-1.*}驗證默認的jdk是否被卸載
$ which java安裝jdk,使用yum安裝或者手動下載安裝jdk-6u31-linux-x64.bin,下載地址:這里
$ yum install jdk -y創建符號連接
$ ln -s XXXXX/jdk1.6.0_31 /usr/java/latest $ ln -s /usr/java/latest/bin/java /usr/bin/java設置環境變量:
$ echo "export JAVA_HOME=/usr/java/latest" >>/root/.bashrc $ echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /root/.bashrc $ source /root/.bashrc驗證版本
$ java -versionjava version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)檢查環境變量中是否有設置JAVA_HOME
$ env | grep JAVA_HOME如果env中沒有JAVA_HOME變量,則修改/etc/sudoers文件
$ vi /etc/sudoersDefaults env_keep+=JAVA_HOME1.5 設置本地yum源
你可以從這里下載 cdh4 的倉庫壓縮包,或者從這里?下載 cdh5 的倉庫壓縮包。
因為我是使用的centos操作系統,故這里使用的cdh5的centos6倉庫,將其下載之后解壓配置cdh的yum源:
[hadoop] name=hadoop baseurl=ftp://cdh1/cdh/5/ enabled=1 gpgcheck=0這里使用的是 ftp 搭建 yum 源,需要安裝 ftp 服務,并將解壓后的目錄拷貝到 ftp 存放文件的目錄下。
操作系統的yum源,建議你通過下載 centos 的 dvd 然后配置一個本地的 yum 源。
其實,在配置了CDH 的 yum 源之后,可以通過 yum 來安裝 jdk,然后,設置 JAVA HOME:
$ yum install jdk -y2. 安裝和配置HDFS
說明:
- 根據文章開頭的節點規劃,cdh1 為NameNode節點和SecondaryNameNode
- 根據文章開頭的節點規劃,cdh2 和 cdh3 為DataNode節點
在 NameNode 節點安裝 hadoop-hdfs-namenode
$ yum install hadoop hadoop-hdfs hadoop-client hadoop-doc hadoop-debuginfo hadoop-hdfs-namenode在 NameNode 節點中選擇一個節點作為 secondarynamenode ,并安裝 hadoop-hdfs-secondarynamenode
$ yum install hadoop-hdfs-secondarynamenode -y在DataNode節點安裝 hadoop-hdfs-datanode
$ yum install hadoop hadoop-hdfs hadoop-client hadoop-doc hadoop-debuginfo hadoop-hdfs-datanode -y配置 NameNode HA 請參考Introduction to HDFS High Availability
2.1 修改hadoop配置文件
更多的配置信息說明,請參考?Apache Cluster Setup
配置如下:
/etc/hadoop/conf/core-site.xml:
fs.defaultFS hdfs://cdh1:8020/etc/hadoop/conf/hdfs-site.xml:
dfs.permissions.superusergroup hadoop2.2 指定本地文件目錄
在hadoop中默認的文件路徑以及權限要求如下:
目錄 所有者 權限 默認路徑 hadoop.tmp.dir hdfs:hdfs drwx------ /var/hadoop dfs.namenode.name.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/name dfs.datanode.data.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/data dfs.namenode.checkpoint.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/namesecondary說明你可以在hdfs-site.xml中只配置 `hadoop.tmp.dir`,也可以分別配置上面的路徑。
這里使用分別配置的方式,hdfs-site.xml中配置如下:
dfs.namenode.name.dir file:///data/dfs/nn dfs.datanode.data.dir file:///data/dfs/dn在NameNode上手動創建?dfs.name.dir?或?dfs.namenode.name.dir?的本地目錄:
$ mkdir -p /data/dfs/nn在DataNode上手動創建?dfs.data.dir?或?dfs.datanode.data.dir?的本地目錄:
$ mkdir -p /data/dfs/dn修改上面目錄所有者:
$ chown -R hdfs:hdfs /data/dfs/nn /data/dfs/dnhadoop的進程會自動設置?dfs.data.dir?或?dfs.datanode.data.dir,但是?dfs.name.dir?或?dfs.namenode.name.dir?的權限默認為755,需要手動設置為700。
故,修改上面目錄權限:
$ chmod 700 /data/dfs/nn或者:
$ chmod go-rx /data/dfs/nn說明:
DataNode的本地目錄可以設置多個,你可以設置?dfs.datanode.failed.volumes.tolerated?參數的值,表示能夠容忍不超過該個數的目錄失敗。
2.3 配置 SecondaryNameNode
在?/etc/hadoop/conf/hdfs-site.xml?中可以配置以下參數:
dfs.namenode.checkpoint.check.period dfs.namenode.checkpoint.txns dfs.namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir dfs.namenode.num.checkpoints.retained如果想配置SecondaryNameNode節點,請從NameNode中單獨選擇一臺機器,然后做以下設置:
- 將運行SecondaryNameNode的機器名稱加入到masters
- 在?/etc/hadoop/conf/hdfs-site.xml?中加入如下配置:
設置多個secondarynamenode,請參考multi-host-secondarynamenode-configuration.
2.4 開啟回收站功能
回收站功能默認是關閉的,建議打開。
在?/etc/hadoop/conf/core-site.xml?中添加如下兩個參數:
- fs.trash.interval,該參數值為時間間隔,單位為分鐘,默認為0,表示回收站功能關閉。該值表示回收站中文件保存多長時間,如果服務端配置了該參數,則忽略客戶端的配置;如果服務端關閉了該參數,則檢查客戶端是否有配置該參數;
- fs.trash.checkpoint.interval,該參數值為時間間隔,單位為分鐘,默認為0。該值表示檢查回收站時間間隔,該值要小于fs.trash.interval,該值在服務端配置。如果該值設置為0,則使用?fs.trash.interval?的值。
2.5 (可選)配置DataNode存儲的負載均衡
在?/etc/hadoop/conf/hdfs-site.xml?中配置以下三個參數(詳細說明,請參考?Optionally configure DataNode storage balancing):
- dfs.datanode.fsdataset. volume.choosing.policy
- dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
- dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction
2.6 開啟WebHDFS
這里只在一個NameNode節點( CDH1 )上安裝:
$ yum install hadoop-httpfs -y然后配置代理用戶,修改 /etc/hadoop/conf/core-site.xml,添加如下代碼:
hadoop.proxyuser.httpfs.hosts * hadoop.proxyuser.httpfs.groups *然后重啟 Hadoop 使配置生效。
接下來,啟動 HttpFS 服務:
$ service hadoop-httpfs startBy default, HttpFS server runs on port 14000 and its URL is http://:14000/webhdfs/v1.
簡單測試,使用 curl 運行下面命令,并查看執行結果:
$ curl "http://localhost:14000/webhdfs/v1?op=gethomedirectory&user.name=hdfs" {"Path":"\/user\/hdfs"}更多的 API,請參考?WebHDFS REST API
2.7 配置LZO
下載repo文件到?/etc/yum.repos.d/:
- 如果你安裝的是 CDH4,請下載Red Hat/CentOS 6
- 如果你安裝的是 CDH5,請下載Red Hat/CentOS 6
然后,安裝lzo:
$ yum install hadoop-lzo* impala-lzo -y最后,在?/etc/hadoop/conf/core-site.xml?中添加如下配置:
io.compression.codecs org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec io.compression.codec.lzo.class com.hadoop.compression.lzo.LzoCodec更多關于LZO信息,請參考:Using LZO Compression
2.8 (可選)配置Snappy
cdh 的 rpm 源中默認已經包含了 snappy ,直接安裝即可。
在每個節點安裝Snappy:
$ yum install snappy snappy-devel -y然后,在?core-site.xml?中修改io.compression.codecs的值,添加?org.apache.hadoop.io.compress.SnappyCodec?:
io.compression.codecs org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec, org.apache.hadoop.io.compress.SnappyCodec使 snappy 對 hadoop 可用:
$ ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/2.9 啟動HDFS
將配置文件同步到每一個節點:
$ scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/ $ scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/格式化NameNode:
$ sudo -u hdfs hadoop namenode -format在每個節點運行下面命令啟動hdfs:
$ for x in `ls /etc/init.d/|grep hadoop-hdfs` ; do service $x start ; done在 hdfs 運行之后,創建?/tmp?臨時目錄,并設置權限為?1777:
$ sudo -u hdfs hadoop fs -mkdir /tmp $ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp2.10 訪問web
通過?http://cdh1:50070/?可以訪問 NameNode 頁面。
3. 安裝和配置YARN
節點規劃
- 根據文章開頭的節點規劃,cdh1 為resourcemanager節點
- 根據文章開頭的節點規劃,cdh2 和 cdh3 為nodemanager節點
- 為了簡單,historyserver也裝在 cdh1 節點上
安裝服務
在 resourcemanager 節點安裝:
$ yum install hadoop-yarn hadoop-yarn-resourcemanager -y在 nodemanager 節點安裝:
$ yum install hadoop-yarn hadoop-yarn-nodemanager hadoop-mapreduce -y安裝 historyserver:
$ yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver -y修改配置參數
要想使用YARN,需要在?/etc/hadoop/conf/mapred-site.xml?中做如下配置:
mapreduce.framework.name yarn配置resourcemanager的節點名稱以及一些服務的端口號,修改/etc/hadoop/conf/yarn-site.xml:
yarn.resourcemanager.resource-tracker.address cdh1:8031 yarn.resourcemanager.address cdh1:8032 yarn.resourcemanager.scheduler.address cdh1:8030 yarn.resourcemanager.admin.address cdh1:8033 yarn.resourcemanager.webapp.address cdh1:8088配置YARN進程:
- yarn.nodemanager.aux-services,在CDH4中該值設為?mapreduce.shuffle,在CDH5中該值設為?mapreduce_shuffle
- yarn.nodemanager.aux-services.mapreduce.shuffle.class,該值設為?org.apache.hadoop.mapred.ShuffleHandler
- yarn.resourcemanager.hostname,該值設為 cdh1
- yarn.log.aggregation.enable,該值設為 true
- yarn.application.classpath,該值設為:
即,在?/etc/hadoop/conf/yarn-site.xml?中添加如下配置:
yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.log-aggregation-enable true yarn.application.classpath $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/* yarn.log.aggregation.enable true注意:
a.?yarn.nodemanager.aux-services?的值在 cdh4 中應該為?mapreduce.shuffle,并配置參數yarn.nodemanager.aux-services.mapreduce.shuffle.class值為 org.apache.hadoop.mapred.ShuffleHandler ,在cdh5中為mapreduce_shuffle,這時候請配置yarn.nodemanager.aux-services.mapreduce_shuffle.class參數
b. 這里配置了?yarn.application.classpath?,需要設置一些喜歡環境變量:
export HADOOP_HOME=/usr/lib/hadoop export HIVE_HOME=/usr/lib/hive export HBASE_HOME=/usr/lib/hbase export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce export HADOOP_COMMON_HOME=${HADOOP_HOME} export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop配置文件路徑
在hadoop中默認的文件路徑以及權限要求如下:
目錄 所有者 權限 默認路徑 yarn.nodemanager.local-dirs yarn:yarn drwxr-xr-x ${hadoop.tmp.dir}/nm-local-dir yarn.nodemanager.log-dirs yarn:yarn drwxr-xr-x ${yarn.log.dir}/userlogs yarn.nodemanager.remote-app-log-dir hdfs://cdh1:8020/var/log/hadoop-yarn/apps在?/etc/hadoop/conf/yarn-site.xml文件中添加如下配置:
yarn.nodemanager.local-dirs file:///data/yarn/local yarn.nodemanager.log-dirs file:///data/yarn/logs yarn.nodemanager.remote-app-log-dir /yarn/apps創建本地目錄
創建?yarn.nodemanager.local-dirs?和?yarn.nodemanager.log-dirs?參數對應的目錄:
$ mkdir -p /data/yarn/{local,logs} $ chown -R yarn:yarn /data/yarn創建Log目錄
在 hdfs 上創建?yarn.nodemanager.remote-app-log-dir?對應的目錄:
$ sudo -u hdfs hadoop fs -mkdir -p /yarn/apps $ sudo -u hdfs hadoop fs -chown yarn:mapred /yarn/apps $ sudo -u hdfs hadoop fs -chmod 1777 /yarn/apps配置History Server:
在?/etc/hadoop/conf/mapred-site.xml?中添加如下:
mapreduce.jobhistory.address cdh1:10020 mapreduce.jobhistory.webapp.address cdh1:19888此外,確保 mapred 用戶能夠使用代理,在?/etc/hadoop/conf/core-site.xml?中添加如下參數:
hadoop.proxyuser.mapred.groups * hadoop.proxyuser.mapred.hosts *配置 Staging 目錄:
在?/etc/hadoop/conf/mapred-site.xml?中配置參數?yarn.app.mapreduce.am.staging-dir(該值默認為:/tmp/hadoop-yarn/staging,請參見?mapred-default.xml):
yarn.app.mapreduce.am.staging-dir /user并在 hdfs 上創建相應的目錄:
$ sudo -u hdfs hadoop fs -mkdir -p /user $ sudo -u hdfs hadoop fs -chmod 777 /user創建 history 子目錄
可選的,你可以在?/etc/hadoop/conf/mapred-site.xml?設置以下兩個參數:
- mapreduce.jobhistory.intermediate-done-dir,該目錄權限應該為1777,默認值為?${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
- mapreduce.jobhistory.done-dir,該目錄權限應該為750,默認值為?${yarn.app.mapreduce.am.staging-dir}/history/done
在 hdfs 上創建目錄并設置權限:
$ sudo -u hdfs hadoop fs -mkdir -p /user/history $ sudo -u hdfs hadoop fs -chmod -R 1777 /user/history $ sudo -u hdfs hadoop fs -chown mapred:hadoop /user/history驗證 HDFS 結構:
$ sudo -u hdfs hadoop fs -ls -R /你應該看到如下結構:
drwxrwxrwt - hdfs hadoop 0 2014-04-19 14:21 /tmp drwxrwxrwx - hdfs hadoop 0 2014-04-19 14:26 /user drwxrwxrwt - mapred hadoop 0 2014-04-19 14:31 /user/history drwxr-x--- - mapred hadoop 0 2014-04-19 14:38 /user/history/done drwxrwxrwt - mapred hadoop 0 2014-04-19 14:48 /user/history/done_intermediate drwxr-xr-x - hdfs hadoop 0 2014-04-19 15:31 /yarn drwxrwxrwt - yarn mapred 0 2014-04-19 15:31 /yarn/apps看到上面的目錄結構,你就將NameNode上的配置文件同步到其他節點了,并且啟動 yarn 的服務。
同步配置文件
同步配置文件到整個集群:
$ scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/ $ scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/啟動服務
在 cdh1 節點啟動 mapred-historyserver :
$ /etc/init.d/hadoop-mapreduce-historyserver start在每個節點啟動 YARN :
$ for x in `ls /etc/init.d/|grep hadoop-yarn` ; do service $x start ; done為每個 MapReduce 用戶創建主目錄,比如說 hive 用戶或者當前用戶:
$ sudo -u hdfs hadoop fs -mkdir /user/$USER $ sudo -u hdfs hadoop fs -chown $USER /user/$USER設置?HADOOP_MAPRED_HOME?,或者把其加入到 hadoop 的配置文件中
$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce訪問 web
通過?http://cdh1:8088/?可以訪問 Yarn 的管理頁面。
通過?http://cdh1:19888/?可以訪問 JobHistory 的管理頁面。
查看在線的節點:http://cdh1:8088/cluster/nodes。
運行下面的測試程序,看是否報錯:
# Find how many jars name ending with examples you have inside location /usr/lib/ $ find /usr/lib/ -name "*hadoop*examples*.jar" # To list all the class name inside jar $ find /usr/lib/ -name "hadoop-examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}' # To search for specific class name inside jar $ find /usr/lib/ -name "hadoop-examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}' | grep -i wordcount.class # 運行 randomwriter 例子 $ sudo -u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter out4. 安裝 Zookeeper
簡單說明:
Zookeeper 至少需要3個節點,并且節點數要求是基數,這里在所有節點上都安裝 Zookeeper。
安裝
在每個節點上安裝zookeeper
$ yum install zookeeper* -y修改配置文件
設置 zookeeper 配置?/etc/zookeeper/conf/zoo.cfg
maxClientCnxns=50 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/lib/zookeeper clientPort=2181 server.1=cdh1:2888:3888 server.2=cdh3:2888:3888 server.3=cdh3:2888:3888同步配置文件
將配置文件同步到其他節點:
$ scp -r /etc/zookeeper/conf root@cdh2:/etc/zookeeper/ $ scp -r /etc/zookeeper/conf root@cdh3:/etc/zookeeper/初始化并啟動服務
在每個節點上初始化并啟動 zookeeper,注意 n 的值需要和 zoo.cfg 中的編號一致。
在 cdh1 節點運行
$ service zookeeper-server init --myid=1 $ service zookeeper-server start在 cdh2 節點運行
$ service zookeeper-server init --myid=2 $ service zookeeper-server start在 cdh3 節點運行
$ service zookeeper-server init --myid=3 $ service zookeeper-server start測試
通過下面命令測試是否啟動成功:
$ zookeeper-client -server cdh1:21815. 安裝 HBase
HBase 依賴 ntp 服務,故需要提前安裝好 ntp。
安裝前設置
1)修改系統 ulimit 參數:
在?/etc/security/limits.conf?中添加下面兩行并使其生效:
hdfs - nofile 32768 hbase - nofile 327682)修改?dfs.datanode.max.xcievers
在?hdfs-site.xml?中修改該參數值,將該值調整到較大的值:
dfs.datanode.max.xcievers 8192安裝
在每個節點上安裝 master 和 regionserver
$ yum install hbase hbase-master hbase-regionserver -y如果需要你可以安裝 hbase-rest、hbase-solr-indexer、hbase-thrift
修改配置文件
修改?hbase-site.xml文件,關鍵幾個參數及含義如下:
- hbase.distributed:是否為分布式模式
- hbase.rootdir:HBase在hdfs上的目錄路徑
- hbase.tmp.dir:本地臨時目錄
- hbase.zookeeper.quorum:zookeeper集群地址,逗號分隔
- hbase.hregion.max.filesize:hregion文件最大大小
- hbase.hregion.memstore.flush.size:memstore文件最大大小
另外,在CDH5中建議關掉Checksums(見Upgrading HBase)以提高性能,修改為如下:
hbase.regionserver.checksum.verify false hbase.hstore.checksum.algorithm NULL最后的配置如下,供參考:
hbase.cluster.distributed true hbase.rootdir hdfs://cdh1:8020/hbase hbase.tmp.dir /data/hbase hbase.zookeeper.quorum cdh1,cdh2,cdh3 hbase.hregion.max.filesize 536870912 hbase.hregion.memstore.flush.size 67108864 hbase.regionserver.lease.period 600000 hbase.client.retries.number 3 hbase.regionserver.handler.count 100 hbase.hstore.compactionThreshold 10 hbase.hstore.blockingStoreFiles 30 hbase.regionserver.checksum.verify false hbase.hstore.checksum.algorithm NULL在 hdfs 中創建?/hbase?目錄
$ sudo -u hdfs hadoop fs -mkdir /hbase $ sudo -u hdfs hadoop fs -chown hbase:hbase /hbase設置 crontab 定時刪除日志:
$ crontab -e * 10 * * * cd /var/log/hbase/; rm -rf `ls /var/log/hbase/|grep -P 'hbase\-hbase\-.+\.log\.[0-9]'\`>> /dev/null &同步配置文件
將配置文件同步到其他節點:
$ scp -r /etc/hbase/conf root@cdh2:/etc/hbase/ $ scp -r /etc/hbase/conf root@cdh3:/etc/hbase/創建本地目錄
在 hbase-site.xml 配置文件中配置了?hbase.tmp.dir?值為?/data/hbase,現在需要在每個 hbase 節點創建該目錄并設置權限:
$ mkdir /data/hbase $ chown -R hbase:hbase /data/hbase/啟動HBase
$ for x in `ls /etc/init.d/|grep hbase` ; do service $x start ; done訪問web
通過?http://cdh1:60030/?可以訪問 RegionServer 頁面,然后通過該頁面可以知道哪個節點為 Master,然后再通過 60010 端口訪問 Master 管理界面。
6. 安裝hive
在一個 NameNode 節點上安裝 hive:
$ yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase -y在其他 DataNode 上安裝:
$ yum install hive hive-server2 hive-jdbc hive-hbase -y安裝postgresql
這里使用 postgresq l數據庫來存儲元數據,如果你想使用 mysql 數據庫,請參考下文。
手動安裝、配置 postgresql 數據庫,請參考?手動安裝Cloudera Hive CDH
yum 方式安裝:
$ yum install postgresql-server -y初始化數據庫:
$ service postgresql initdb修改配置文件postgresql.conf,修改完后內容如下:
$ cat /var/lib/pgsql/data/postgresql.conf | grep -e listen -e standard_conforming_strings listen_addresses = '*' standard_conforming_strings = off修改 /var/lib/pgsql/data/pg_hba.conf,添加以下一行內容:
host all all 0.0.0.0/0 trust啟動數據庫
#配置開啟啟動 $ chkconfig postgresql on $ service postgresql start安裝jdbc驅動
$ yum install postgresql-jdbc -y $ ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/hive/lib/postgresql-jdbc.jar創建數據庫和用戶
bash# su postgresbash$ psql postgres=# CREATE USER hiveuser WITH PASSWORD 'redhat'; postgres=# CREATE DATABASE metastore owner=hiveuser; postgres=# GRANT ALL privileges ON DATABASE metastore TO hiveuser; postgres=# \q; bash$ psql -U hiveuser -d metastore postgres=# \i /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-0.13.0.postgres.sql SET SET ..注意:
創建的用戶為hiveuser,密碼為redhat,你可以按自己需要進行修改。
初始化數據庫的 sql 文件請根據 cdh 版本進行修改,這里我的 cdh 版本是5.2.0,對應的文件是 ive-schema-0.13.0.postgres.sql
這時候的hive-site.xml文件內容如下:
javax.jdo.option.ConnectionURL jdbc:postgresql://localhost/metastore javax.jdo.option.ConnectionDriverName org.postgresql.Driver javax.jdo.option.ConnectionUserName hiveuser javax.jdo.option.ConnectionPassword redhat datanucleus.autoCreateSchema false mapreduce.framework.name yarn yarn.resourcemanager.resource-tracker.address cdh1:8031 hive.files.umask.value 0002 hive.exec.reducers.max 999 hive.auto.convert.join true hive.metastore.schema.verification true hive.metastore.warehouse.dir /user/hive/warehouse hive.warehouse.subdir.inherit.perms true hive.metastore.uris thrift://cdh1:9083 hive.metastore.server.min.threads 200 hive.metastore.server.max.threads 100000 hive.metastore.client.socket.timeout 3600 hive.support.concurrency true hive.zookeeper.quorum cdh1,cdh2,cdh3 hive.server2.thrift.min.worker.threads 5 hive.server2.thrift.max.worker.threads 100默認情況下,hive-server和 hive-server2 的 thrift 端口都未10000,如果要修改 hive-server2 thrift 端口,請添加:
hive.server2.thrift.port 10001如果要設置運行 hive 的用戶為連接的用戶而不是啟動用戶,則添加:
hive.server2.enable.impersonation true并在 core-site.xml 中添加:
hadoop.proxyuser.hive.hosts * hadoop.proxyuser.hive.groups *安裝mysql
yum方式安裝mysql:
$ yum install mysql mysql-devel mysql-server mysql-libs -y啟動數據庫:
#配置開啟啟動 $ chkconfig mysqld on $ service mysqld start安裝jdbc驅動:
$ yum install mysql-connector-java $ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar我是在 cdh1 節點上創建 mysql 數據庫和用戶:
$ mysql -e " CREATE DATABASE metastore; USE metastore; SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.13.0.mysql.sql; CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'redhat'; GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'localhost'; GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'cdh1'; FLUSH PRIVILEGES; "注意:創建的用戶為 hiveuser,密碼為 redhat ,你可以按自己需要進行修改。
修改 hive-site.xml 文件中以下內容:
javax.jdo.option.ConnectionURL jdbc:mysql://cdh1:3306/metastore?useUnicode=true&characterEncoding=UTF-8 javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver配置hive
修改/etc/hadoop/conf/hadoop-env.sh,添加環境變量?HADOOP_MAPRED_HOME,如果不添加,則當你使用 yarn 運行 mapreduce 時候會出現?UNKOWN RPC TYPE?的異常
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce在 hdfs 中創建 hive 數據倉庫目錄:
- hive 的數據倉庫在 hdfs 中默認為?/user/hive/warehouse,建議修改其訪問權限為?1777,以便其他所有用戶都可以創建、訪問表,但不能刪除不屬于他的表。
- 每一個查詢 hive 的用戶都必須有一個 hdfs 的 home 目錄(?/user?目錄下,如 root 用戶的為?/user/root)
- hive 所在節點的?/tmp?必須是 world-writable 權限的。
創建目錄并設置權限:
$ sudo -u hdfs hadoop fs -mkdir /user/hive $ sudo -u hdfs hadoop fs -chown hive /user/hive $ sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse $ sudo -u hdfs hadoop fs -chmod 1777 /user/hive/warehouse $ sudo -u hdfs hadoop fs -chown hive /user/hive/warehouse啟動hive-server和metastore:
$ service hive-metastore start $ service hive-server start $ service hive-server2 start測試:
$ hive -e 'create table t(id int);' $ hive -e 'select * from t limit 2;' $ hive -e 'select id from t;'訪問beeline:
$ /usr/lib/hive/bin/beelinebeeline> !connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver0: jdbc:hive2://localhost:10000> SHOW TABLES; show tables; +-----------+ | tab_name | +-----------++-----------+No rows selected (0.238 seconds) 0: jdbc:hive2://localhost:10000>其 sql語法參考SQLLine CLI,在這里,你不能使用HiveServer的sql語句
與hbase集成
先安裝 hive-hbase:
$ yum install hive-hbase -y如果你是使用的 cdh4,則需要在 hive shell 里執行以下命令添加 jar:
$ ADD JAR /usr/lib/hive/lib/zookeeper.jar; $ ADD JAR /usr/lib/hive/lib/hbase.jar; $ ADD JAR /usr/lib/hive/lib/hive-hbase-handler-<hive_version>.jar $ ADD JAR /usr/lib/hive/lib/guava-11.0.2.jar;說明:?guava 包的版本以實際版本為準。
如果你是使用的 cdh5,則需要在 hive shell 里執行以下命令添加 jar:
ADD JAR /usr/lib/hive/lib/zookeeper.jar; ADD JAR /usr/lib/hive/lib/hive-hbase-handler.jar; ADD JAR /usr/lib/hbase/lib/guava-12.0.1.jar; ADD JAR /usr/lib/hbase/hbase-client.jar; ADD JAR /usr/lib/hbase/hbase-common.jar; ADD JAR /usr/lib/hbase/hbase-hadoop-compat.jar; ADD JAR /usr/lib/hbase/hbase-hadoop2-compat.jar; ADD JAR /usr/lib/hbase/hbase-protocol.jar; ADD JAR /usr/lib/hbase/hbase-server.jar;以上你也可以在 hive-site.xml 中通過?hive.aux.jars.path?參數來配置,或者你也可以在 hive-env.sh 中通過?export HIVE_AUX_JARS_PATH=?來設置。
總結
以上是生活随笔為你收集整理的使用yum安装CDH Hadoop集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xcode -饼状进度条
- 下一篇: UVA1583 UVALive3355