本文将介绍hive环境在Mac上的完整搭建过程,其他机器上的安装过程大同小异,可直接参考官网教程。
开发环境MacOS High Sierra 10.13.5
Java version "1.8.0_171"
hadoop 3.1.2
hive 3.1.1
MySQL 5.7.25
Hadoop安装
Standalone模式:非分布式,只有一个Java进程。
Pseudo-Distributed模式(伪分布): 只有一个节点,但是可以用Java的多个进程来模拟分布式环境,以下将按照伪分布模式进行配置。
安装Hadoop需要提前安装Java、ssh,Hadoop 2.7及以上版本要求最低Java7,这里我使用的是Java8。etc/hadoop/core-site.xml增加配置项:
fs.defaultFS
hdfs://localhost:9000
etc/hadoop/hdfs-site.xml增加配置项:
dfs.replication
1
测试ssh localhost是否能免密登录,下面是能免密登录的情况:
yitian@MacBook-Pro:~/softwares/hadoop-3.1.2$ ssh localhost
Last login: Tue May 14 20:34:51 2019
如果不能免密登录,请将本机的公钥复制到~/.ssh/authorized_keys,如果本地连公钥都没有,需要先生成一下。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
也有可能出现Connection refused,那是因为你的Mac没有打开远程登录功能。
yitian@MacBook-Pro:~/softwares/hadoop-3.1.2$ ssh localhost
ssh: connect to host localhost port 22: Connection refused
解决方法:系统偏好设置 > 选择共享 > 远程登录(勾上)使用HDFS
首先格式化文件系统:
bin/hdfs namenode -format
启动 NameNode 和 DataNode 进程:
sbin/start-dfs.sh
简单测试一下,放几个文件到HDFS上:
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
关闭HDFS:
sbin/stop-dfs.sh使用Yarn进行Hadoop的资源管理,只需要更改两个配置文件。
etc/hadoop/mapred-site.xml增加配置项:
mapreduce.framework.name
yarn
mapreduce.application.classpath
$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
etc/hadoop/yarn-site.xml增加配置项:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
测试Yarn,使用以下命令启动和关闭 ResourceManager、NodeManager 进程:
sbin/start-yarn.sh
sbin/stop-yarn.sh
ResourceManager 的默认地址: http://localhost:8088/
sbin/start-all.sh
sbin/stop-all.sh
start-dfs.sh 只启动了HDFS的NameNode 和DataNode,start-all.sh还启动了Yarn的ResourceManager 和NodeManager,建议直接使用start-all.sh。
可以用jps查看已启动的进程
42112 DataNode
42450 ResourceManager
42258 SecondaryNameNode
42547 NodeManager
42014 NameNode
我这里一次性把所有环境变量都配好,下面如果涉及到环境变量配置的部分可以返回这里查看。
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/"
export HADOOP_HOME="/Users/yitian/softwares/hadoop-3.1.2/"
export HIVE_HOME="/Users/yitian/softwares/apache-hive-3.1.1-bin/"
PATH="${JAVA_HOME}/bin/:${HADOOP_HOME}/bin/:${HADOOP_HOME}/sbin/:${HIVE_HOME}/bin:${PATH}"
export PATH
Hive安装修改~/.bash_profile设置环境变量HIVE_HOME、HADOOP_HOME,记得source ~/.bash_profile生效。
创建HDFS目录并修改权限
$HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse从Hive2.1起,必须先用schematool进行一次初始化,比如使用内嵌的derby数据库进行初始化。
$HIVE_HOME/bin/schematool -dbType derby -initSchema
Hive schematool 可以初始化Hive的Metastore schema 或从旧版本升级。
Hive installation issues: Hive metastore database is not initialized如果碰到这种报错,可以参考RJ Code的回答。Hive installation issues: Hive metastore database is not initialized 解决方法:
如果没有初始化,直接schematool -dbType derby -initSchema
如果之前初始化过,可以删除metastore_db目录,然后重新schematool -dbType derby -initSchema
好,安装完成,可以进行各种测试了。
运行Hive-CLI
$HIVE_HOME/bin/hive
# 因为配过环境变量了,可以直接hive进入CLI
hive
derby内置数据库非常小巧,很适合做各种快速测试,在同一个目录下同时只能有一个hive客户端能使用数据库,不适合线上实际应用。如果确实想用derby 做元数据的server,可以参考Hive Using Derby in Server Mode。
推荐使用MySQL做元数据管理,下面介绍下如何配置。
MySQL安装
安装过程会弹出提示窗口,告知初始root密码,一定要记录下来。
修改root密码:
set password for root@localhost = password('Password');
元数据库从derby切换为MySQL
我们将使用本地的MySQL做测试,只需要创建conf/hive-site.xml,配置以下四个属性即可。
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.cj.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
Password
jdbc:mysql://localhost:3306/hiver?createDatabaseIfNotExist=true如果MySQL中不存在hive这个数据库,hive将会自动创建这个数据库。
下载最新版本mysql-connector-java-8.0.16.jar,并将它拷贝至$HIVE_HOME/lib/目录下,因为用的比较新的MySQL驱动版本,ConnectionDriverName为com.mysql.cj.jdbc.Driver,较老的版本可能配置为com.mysql.jdbc.Driver。
重新初始化schema
schematool -dbType mysql -initSchema
# 进入hive
hive
至此,安装完成,可以愉快的开始hive之旅了。
参考资料: