Update:html
集羣規劃爲3個節點,每一個節點的ip、主機名和部署的組件分配以下:java
192.168.56.121 cdh1 NameNode、Hive、ResourceManager、HBase
192.168.56.122 cdh2 DataNode、SSNameNode、NodeManager、HBase
192.168.56.123 cdh3 DataNode、HBase、NodeManager
安裝 Hadoop 集羣前先作好下面的準備工做,在修改配置文件的時候,建議在一個節點上修改,而後同步到其餘節點,例如:對於 hdfs 和 yarn ,在 NameNode 節點上修改而後再同步,對於 HBase,選擇一個節點再同步。由於要同步配置文件和在多個節點啓動服務,建議配置 ssh 無密碼登錄。node
CDH 要求使用 IPv4,IPv6 不支持。mysql
禁用IPv6方法:linux
$ 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
使其生效:web
$ sysctl -p
最後確認是否已禁用:sql
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1
一、設置hostname,以cdh1爲例shell
$ hostname cdh1
二、確保/etc/hosts中包含ip和FQDN,若是你在使用DNS,保存這些信息到/etc/hosts不是必要的,倒是最佳實踐。數據庫
三、確保/etc/sysconfig/network中包含hostname=cdh1apache
四、檢查網絡,運行下面命令檢查是否配置了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.121
五、hadoop的全部配置文件中配置節點名稱時,請使用hostname和不是ip
$ setenforce 0 $ vim /etc/sysconfig/selinux #修改SELINUX=disabled
清空iptables
$ iptables -F
這裏選擇 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 on
ntpq用來監視ntpd操做,使用標準的NTP模式6控制消息模式,並與NTP服務器通訊。
ntpq -p 查詢網絡中的NTP服務器,同時顯示客戶端和每一個服務器的關係。
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(1) .LOCL. 5 l 6 64 1 0.000 0.000 0.000
在cdh2和cdh3節點上執行下面操做:
$ ntpdate cdh1
Ntpd啓動的時候一般須要一段時間大概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 系統就會自動的進行網絡時間校準。
如下是手動安裝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 -version
java 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/sudoers
Defaults env_keep+=JAVA_HOME
你能夠從這裏下載 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 -y
說明:
在 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
更多的配置信息說明,請參考 Apache Cluster Setup
配置以下:
/etc/hadoop/conf/core-site.xml:
fs.defaultFS hdfs://cdh1:8020
/etc/hadoop/conf/hdfs-site.xml:
dfs.permissions.superusergroup hadoop
在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/dn
hadoop的進程會自動設置 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 參數的值,表示可以容忍不超過該個數的目錄失敗。
在 /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中單獨選擇一臺機器,而後作如下設置:
dfs.secondary.http.address cdh1:50090
設置多個secondarynamenode,請參考multi-host-secondarynamenode-configuration.
回收站功能默認是關閉的,建議打開。
在 /etc/hadoop/conf/core-site.xml 中添加以下兩個參數:
在 /etc/hadoop/conf/hdfs-site.xml 中配置如下三個參數(詳細說明,請參考 Optionally configure DataNode storage balancing):
這裏只在一個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 start
By 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
下載repo文件到 /etc/yum.repos.d/:
而後,安裝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
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/
將配置文件同步到每個節點:
$ 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 /tmp
經過 http://cdh1:50070/ 能夠訪問 NameNode 頁面。
在 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進程:
$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/*
即,在 /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 設置如下兩個參數:
在 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
$ 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
經過 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 out
簡單說明:
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:2181
HBase 依賴 ntp 服務,故須要提早安裝好 ntp。
1)修改系統 ulimit 參數:
在 /etc/security/limits.conf 中添加下面兩行並使其生效:
hdfs - nofile 32768
hbase - nofile 32768
2)修改 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文件,關鍵幾個參數及含義以下:
另外,在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/
$ for x in `ls /etc/init.d/|grep hbase` ; do service $x start ; done
經過 http://cdh1:60030/ 能夠訪問 RegionServer 頁面,而後經過該頁面能夠知道哪一個節點爲 Master,而後再經過 60010 端口訪問 Master 管理界面。
在一個 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
這裏使用 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 postgres
bash$ 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 *
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
修改/etc/hadoop/conf/hadoop-env.sh,添加環境變量 HADOOP_MAPRED_HOME,若是不添加,則當你使用 yarn 運行 mapreduce 時候會出現 UNKOWN RPC TYPE 的異常
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
在 hdfs 中建立 hive 數據倉庫目錄:
建立目錄並設置權限:
$ 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/beeline
beeline> !connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver
0: 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語句
先安裝 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= 來設置。