环境配置说明:
软件 | 版本 |
---|---|
VirtualBox | 6.1 |
Ubuntu | 16.04 |
Hadoop | 2.7.7 |
MySql | 5.7.29 |
MySql驱动 | 5.1.46 |
Hive | 2.3.6 |
sqoop | 1.4.7 |
参考依据:
《python+spark2.0+hadoop机器学习与大数据实战》的第2到6章
(这本书在网上一搜便可以搜到pdf版。傻瓜式教学,跟着一步步安装即可)
这是目前的最新版本,我的电脑是64位,所以下载了6.1版本,如果您的电脑是32位,应当去下载5.2版本里面32位对应的软件。
目前最新版本是18.04,但是不知道稳不稳定,保险起见就装的16.04。我设置的用户名为zdx,后续命令行中只要出现zdx,就是我的名字,不要跟着乱敲,你需要换成你自己的名字。
我下载目前最新版的hadoop3.X,在后续的环境配置中遇到了各种各样的错误,比如hadoop启动不了,越改越错,花了很长时间,所以最后死马当活马医,就换了低版本的,就没问题了。
虚拟机名称 | IP地址 |
---|---|
master | 192.168.56.114 |
data1 | 192.168.56.111 |
data2 | 192.168.56.112 |
data3 | 192.168.56.113 |
需要注意的是第一个碰到的也是最大的一个错误是SSH免密登录问题。
跟着书本设置完ssh之后,记得一定执行命令 ssh localhost,检查是否设置成功。如果让你输密码,就说明设置失败。在我的电脑上ssh免密设置失败的后续问题是:这个问题不会影响hadoop伪分布式的启动,但是会直接影响到hadoop集群的启动,会有虚拟机的datanode启动不了,而且我在hadoop集群上改这个问题,也是越改越错,因为要改四个虚拟机,而且主机和客机改的内容还不一样,很麻烦,越麻烦越出错,越出错越麻烦,所以一定要从一开始就保证ssh能够免密登录。
这是我遇到的问题以及解决方法
我是跟着这位大佬配置的,她写的很详细。
ubuntu安装mysql
(只在master上安装,前期只启动master一个虚拟机即可,后期需要启动hadoop集群,所有的命令都在master上输入)
(1)首先只启动master。
为了避免下Hive下到一半出现段错误,先扩容:
ulimit -s 102400
(2)下载Hive
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.6/ apache-hive-2.3.6-bin.tar.gz
(3)解压
sudo tar -zxvf apache-hive-2.3.6-bin.tar.gz
(4)移动apache-hive-2.3.6-bin到/usr/local/hive
sudo mv apache-hive-2.3.6-bin /usr/local/hive
(5)修改文件权限
sudo chown -R zdx:zdx usr/local/hive
(6)新建目录tmp
mkdir -p /usr/local/hive/tmp
(7)添加环境变量
sudo gedit ~/.bashrc
在文件中添加:
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
(8)使配置生效
source ~/.bashrc
(9)切换目录(一定要切换目录,第10,11步都在该目录下进行)
cd /usr/local/hive/conf
(10)将hive-env.sh.template重命名为hive-env.sh
sudo mv hive-env.sh.template hive-env.sh
(11)在hive-env.sh中分别找到下面3个大写英文的位置,之后删除这一行前面的#,并对=后面的东西进行修改:
sudo gedit hive-env.sh
在文件中添加:
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hive/conf
# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
(12)接下来就需要启动hadoop集群
先返回根目录,输入命令:cd
之后启动data1,data2,data3
然后在master虚拟机命令行里输入start-all.sh
(13)在hdfs上创建相关仓库,并配置权限:
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log
(14)修改hive-site.xml的主要内容
cp hive-default.xml.template hive-site.xml
sudo vi hive-site.xml
文件需要修改或添加的内容:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log/hadoop</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.56.114:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>zdx123</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>system:java.io.tmpdir</name>
<value>/usr/local/hive/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>root</value>
</property>
(如果实在搜索不到,就直接在文本末尾手动添加所需要的变量,一共9处需要修改或添加的地方,改成上面代码那样的)
(但是,javax.jdo.option.connectionURL下面你要将我的“192.168.56.114”改成你自己MySQL的地址;
javax.jdo.option.ConnectionUserName下面你要将我的登录名“root”改成你自己的MySQL数据库登录名;
javax.jdo.option.ConnectionPassword下面你要将我的密码“zzdx123”改成你自己的MySQL数据库的登录密码)
(补充一点:
vi命令大全
以hive.metastore.warehouse.dir为例:
在文本中随意一个位置输入“/”,在/后面输入hive.metastore.warehouse.dir,回车,如果该文本里有好几个hive.metastore.warehouse.dir,按n挨个向下寻找,找出要修改的那个,按x是删除,按a是编辑,按:w是保存,按:q是退出)
(15)配置驱动(mysql jdbc,本文使用5.1.46版本),命令行下载:
sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
(16)解压:
sudo tar -zxvf mysql-connector-java-5.1.46.tar.gz
(17)移动到hive/lib目录下
sudo cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46/ mysql-connector-java-5.1.46-bin.jar /usr/local/hive/lib
(18)初始化
cd /usr/local/hive/bin
schematool -dbType mysql -initSchema
(看到屏幕上显示schemaTool completed,就说明初始化成功了)
(19)在/usr/local/hive/bin下启动hive
hive
(20)参考这位大佬写的第五步及之后的内容来测试hive是否安装正确
启动hive及测试
(启动hadoop集群,之后只在master上操作)
(1)为了避免下Hive下到一半出现段错误,先扩容:
ulimit -s 102400
(2)下载Sqoop
wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
(3)解压
sudo tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
(4)移动位置
sudo mv sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/sqoop
(5)对sqoop目录进行赋权
sudo chown -R zdx:zdx /usr/local/sqoop
(6)添加环境变量
sudo gedit ~/.bashrc
修改文件内容:
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/hadoop-2.7.3
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/hadoop-2.7.3
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
(上面的内容要按照实际情况修改,另外,你还装了Hbase和Zookeeper则也要在等号后面添加配置)
(7)复制相关依赖包$SQOOP_HOME/lib,主要复制下面两个文件。
cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46/ mysql-connector-java-5.1.46-bin.jar /usr/local/sqoop/lib
cp /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.3.jar /usr/local/sqoop/lib
(8)修改/usr/local/sqoop/bin/configure-sqoop
sudo gedit /usr/local/sqoop/bin/configure-sqoop
注释掉HCatalog,Accumulo检查,除非你准备使用HCatalog,Accumulo等HADOOP上的组件:
##Moved to be a runtime check in sqoop.
#if[ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does notexist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root ofyour HCatalog installation.'
#fi
#if[ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does notexist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the rootof your Accumulo installation.'
#fi
#Add HCatalog to dependency list
#if[ -e "${HCAT_HOME}/bin/hcat" ]; then
# TMP_SQOOP_CLASSPATH=${SQOOP_CLASSPATH}:`${HCAT_HOME}/bin/hcat-classpath`
# if [ -z "${HIVE_CONF_DIR}" ]; then
# TMP_SQOOP_CLASSPATH=${TMP_SQOOP_CLASSPATH}:${HIVE_CONF_DIR}
# fi
# SQOOP_CLASSPATH=${TMP_SQOOP_CLASSPATH}
#fi
#Add Accumulo to dependency list
#if[ -e "$ACCUMULO_HOME/bin/accumulo" ]; then
# for jn in `$ACCUMULO_HOME/bin/accumuloclasspath | grep file:.*accumulo.*jar |cut -d':' -f2`; do
# SQOOP_CLASSPATH=$SQOOP_CLASSPATH:$jn
# done
# for jn in `$ACCUMULO_HOME/bin/accumuloclasspath | grep file:.*zookeeper.*jar |cut -d':' -f2`; do
# SQOOP_CLASSPATH=$SQOOP_CLASSPATH:$jn
# done
#fi
(9) 测试与mysql的连接
首先确保mysql在运行:
sudo service mysql start
然后测试是否连通:
sqoop list-databases --connect jdbc:mysql://192.168.56.114:3306/ --username root -P
(192.168.56.114是我的master的IP地址,也是我的MySql地址,你需要换成你自己的MySql地址;
注意最后的P是大写)
输入密码后如果能显示你mysql上的数据库,则表示已经连通,如下图所示:
至此就配置完成啦!!!
最后特别感谢这些大佬:
https://www.cnblogs.com/opsprobe/p/9126864.html
https://segmentfault.com/a/1190000011303459
https://www.cnblogs.com/standingby/p/10039974.html
https://www.cnblogs.com/harrymore/p/9056863.html