一、背景
需要使用hive遠(yuǎn)程debug,嘗試使用無hadoop部署hive方式一直失敗,無果,還是使用有hadoop方式。最終查看linux內(nèi)存占用6GB
,還在后臺運(yùn)行docker的mysql(bitnami/mysql:8.0
),基本滿意。
版本選擇:
(1)hive2 hadoop2 和hive3和hadoop3需要搭配使用,不能像chd的hive2和hadoop3搭配使用,容易出現(xiàn)問題。
本文選擇版本,都是官網(wǎng)推薦的版本:hadoop-3.3.6.tar.gz
apache-hive-3.1.3-bin.tar.gz
二、創(chuàng)建用戶和組
# hadoop縮寫hdp
useradd hdp
groupadd hadoop
后邊啟動(dòng)hadoop不能用root用戶。
三、配置集群(單節(jié)點(diǎn))互信
su hdp && cd .ssh
ssh-keygen
# 一路回車
cat id_rsa.pub >> authorized_keys
vi /etc/hosts
# localhost 行后追加 hdp
# 配置后測試下
ssh hdp
ssh localhost
四、hadoop搭建
hadoop官網(wǎng)
下載安裝包
本文hadoop安裝路徑:/opt/hadoop-3.3.6
# 解壓
tar -xvf hadoop-3.3.6.tar.gz
# 改名字
mv ... hadoop-3.3.6
# 加個(gè)軟連接
cd hadoop-3.3.6
ln -s etc/hadoop conf
修改hadoop-env.sh
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"
修改core-site.xml
,添加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp:9000</value>
<description>hdfs內(nèi)部通訊訪問地址</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!--臨時(shí)文件目錄需要自己建立-->
<value>/var/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
修改hdfs-site.xml,添加:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/hadoop/data/namenode</value>
<description> namenode 存放name table(fsimage)本地目錄需要修改,如果沒有需要自己創(chuàng)建文件目錄)</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/hadoop/data/datanode</value>
<description>datanode存放block本地目錄(需要修改,如果沒有需要自己創(chuàng)建文件目錄)</description>
</property>
<property>
<!--由于只有一臺機(jī)器,hdfs的副本數(shù)就指定為1-->
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024m</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/hadoop-3.3.6/conf:/opt/hadoop-3.3.6/share/hadoop/common/lib/*:/opt/hadoop-3.3.6/share/hadoop/common/*:/opt/hadoop-3.3.6/share/hadoop/hdfs:/opt/hadoop-3.3.6/share/hadoop/hdfs/lib/*:/opt/hadoop-3.3.6/share/hadoop/hdfs/*:/opt/hadoop-3.3.6/share/hadoop/mapreduce/*:/opt/hadoop-3.3.6/share/hadoop/yarn:/opt/hadoop-3.3.6/share/hadoop/yarn/lib/*:/opt/hadoop-3.3.6/share/hadoop/yarn/*</value>
</property>
</configuration>
yarn.application.classpath
是使用hadoop classpath
生成的,一定要有此配置。
修改mapred-site.xml
,添加:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
touch init-env.sh
添加如下內(nèi)容,本文使用的hadoop安裝路徑的是:/opt/hadoop-3.3.6
:
#!/bin/bash
# 移除老的環(huán)境變量
# 如果本機(jī)已經(jīng)安裝過hadoop一定要注意,將舊hadoop環(huán)境變量移除,可以使用printenv 或者env 查看已經(jīng)有的環(huán)境變量
unset HADOOP_HDFS_HOME
unset HADOOP_YARN_HOME
unset HADOOP_CLASSPATH
unset HADOOP_MAPRED_HOME
unset HADOOP_HOME
unset HADOOP_CONF_DIR
# 添加新的環(huán)境變量
export HADOOP_HOME=/opt/hadoop-3.3.6
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HADOOP_LOG_DIR=/var/hadoop/log
export PATH=$HADOOP_HOME/bin:$PATH
加載環(huán)境變量
source init-env.sh
# 測試下:
env
echo $HADOOP_HOME
echo $HADOOP_CONF_DIR
啟動(dòng)和停止hadoop
chown -R hdp:hadoop $HADOOP_HOME
# 必須使用非root賬戶登錄
su hdp
$HADOOP_HOME/sbin/start-all.sh
# 使用jps查看下java進(jìn)程情況:
NameNode
ResourceManager
NodeManager
SecondaryNameNode
DataNode
# 停止
$HADOOP_HOME/sbin/stop-all.sh
# 可以在console查看日志的腳本,即單獨(dú)啟動(dòng)yarn或者h(yuǎn)dfs:
start-dfs.sh
start-yarn.sh
hdfs web
yarn web
使用命令行確認(rèn)下hdfs和yarn是否可用:
hdfs dfs -mkdir /tmp
hdfs dfs -ls /
yarn application -list
六、hive搭建
本文hive安裝位置:/opt/hive-3.1.3/
hive官網(wǎng)
tar -xvf apache-hive-3.1.3-bin.tar.gz
mv ... hive-3.1.3
cd hive-3.1.3 && mkdir logs
cp hive-env.sh.template hive-env.sh
touch hive-site.xml
# 不手動(dòng)添加的話,hive不打印日志?。?!
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
修改hive-env.sh
HADOOP_HOME=/opt/hadoop-3.3.6
修改hive-site.xml
,添加:
本文hive使用mysql作為metastore,提前在mysql中創(chuàng)建好數(shù)據(jù)庫hive3_local
<!-- 數(shù)據(jù)庫連接JDBC的URL地址,& 是urlencode后的表達(dá)-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql-ip:3306/hive3_local?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<!-- 數(shù)據(jù)庫連接driver,即MySQL驅(qū)動(dòng)-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!-- MySQL數(shù)據(jù)庫用戶名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- MySQL數(shù)據(jù)庫密碼-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>密碼</value>
</property>
<property>
<!--hive表在hdfs的位置-->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.security.authorization.enabled</name>
<value>false</value>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
touch init-env.sh
添加如下內(nèi)容
#!/bin/bash
export HIVE_HOME=/opt/hive-3.1.3
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$HIVE_HOME/bin:$PATH
加載hive環(huán)境變量。
source init-env.sh
初始化metastore
把數(shù)據(jù)庫jdbc驅(qū)動(dòng)復(fù)制到lib目錄下,本文是mysql-connector-j-8.0.31.jar
# 進(jìn)入hive的bin目錄
./schematool -dbType mysql -initSchema
配置hive啟動(dòng)腳本
touch start-all.sh
添加如下內(nèi)容:
#!/bin/bash
nohup $HIVE_HOME/bin/hive --service metastore &
nohup $HIVE_HOME/bin/hive --service hiveserver2 &
啟動(dòng)hive,注:一定要確保hadoop已經(jīng)成功啟動(dòng),才能啟動(dòng)hive,否則連接hive beeline會(huì)卡死但是不報(bào)錯(cuò)!?。?/code>
chown -R hdp:hadoop $HIVE_HOME
su hdp
source /opt/hadoop-3.3.6/conf/init-env.sh
source /opt/hive-3.1.3/conf/init-env.sh
sh start-all.sh
# 查看進(jìn)程,可以看到兩個(gè)RunJar。
jps
153216 RunJar
152044 RunJar
配置hive停止腳本
touch stop-all.sh
添加如下內(nèi)容:
jps | grep RunJar | awk '{print $1}' | xargs kill -9
判斷l(xiāng)inux端口使用已經(jīng)監(jiān)聽:
# hive的metastore端口號9083
netstat -ntulp |grep 9083
# 出現(xiàn)端口信息,說明metastore已經(jīng)啟動(dòng)成功了。
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::9083 :::* LISTEN 152044/java
# 使用如上獲取的ip獲取具體進(jìn)程啟動(dòng)命令:
ps -ef | grep 152044
hdp 152044 36213 0 4月09 pts/1 00:01:01 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_metastore -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-metastore-3.1.3.jar org.apache.hadoop.hive.metastore.HiveMetaStore
# hive的hiveserver2端口號10000
netstat -ntulp | grep 10000
# 出現(xiàn)端口信息,說明hiveserver已經(jīng)啟動(dòng)成功了。
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::10000 :::* LISTEN 152045/java
# 使用如上獲取的ip獲取具體進(jìn)程啟動(dòng)命令:
ps -ef | grep 152045
hdp 152045 36213 0 4月09 pts/1 00:04:30 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_hiveserver2 -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Djline.terminal=jline.UnsupportedTerminal -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-service-3.1.3.jar org.apache.hive.service.server.HiveServer2
beeline鏈接hive文章來源:http://www.zghlxwxcb.cn/news/detail-846427.html
beeline
# 輸入`!verbose`,設(shè)置打印日志verbose
!verbose
# 使用hive用戶登錄,不輸入密碼(空密碼),直接回車。
!connect jdbc:hive2://localhost:10000 hive
七、參考文檔
hadoop和hive單機(jī)部署
Hive2 新版連接工具 beeline 詳解
找不到或無法加載主類 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
DBeaver連接Hive錯(cuò)誤總結(jié)
User: hadoop is not allowed to impersonate anonymous
return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive設(shè)置權(quán)限
hive 入門 修改hive日志路徑
Hadoop常見端口號及配置文件文章來源地址http://www.zghlxwxcb.cn/news/detail-846427.html
到了這里,關(guān)于【hive】單節(jié)點(diǎn)搭建hadoop和hive的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!