hadoop、hive安装
hadoop(hdfs+mapReduce+yarn)
前提
准备三台服务器(本文使用虚拟机),安装jdk1.8
配置
本文使用hadoop版本为3.3.0,解压hadoop压缩包到任意目录,以/export/server/hadoop-3.3.0/
为例。
解压完毕后,进入hadoop目录,修改配置文件,位于/etc/hadoop/
目录下,文本中有关路径和网络地址的配置需要根据实际情况修改
- 指定java路径,指定各个进程运行的用户名 ``` vim hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_341 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root ```
- 核心配置文件,共有四个需要修改 ``` vim core-site.xml
```
``` vim hdfs-site.xml
```
``` vim mapred-site.xml
```
``` vim yarn-site.xml
```
- 设置集群所在的网络地址 ``` vim workers
192.168.88.128 192.168.88.129 192.168.88.130 ```
- 将hadoop添加到环境变量 ``` vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
``
编译环境变量,
source /etc/profile`,执行hadoop命令,验证是否配置成功
-
将hadoop及环境变量文件同步到其他两个节点,执行编译
-
初始化hdfs 在主节点机器执行
hdfs namenode -format
,如果出现storage directory /export/server/hadoop-3.3.0/dfs/name has been successfully formatted
,说明成功
启动
start-all.sh
启动成功后,在浏览器输入namenode所在服务器地址加上9870端口,可查看hdfs管理界面,如192.168.88.128:9870
;在浏览器输入namenode所在服务器地址加上8088端口,可查看mapReduce管理界面,如192.168.88.128:8088
问题记录
启动时,报错
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
需要配置免密登录,才可以启动其他服务器下的hadoop服务,参考SSH免密登录配置
hdfs
上传下载命令
注:
1. 其他常见文件操作命令基本与linux相同,故不记录
2. 本地路径可直接写路径,也可用前缀file:///
指明绝对路径;hdfs路径可直接写路径,也可用前缀hdfs://${namenode}:8020/
指明绝对路径
- 上传文件
hadoop fs -put 本地路径 hdfs路径
- 下载文件
hadoop fs -get hdfs路径 本地路径
问题记录
使用
start-dfs.sh
启动,控制台显示成功,进入管理界面,live nodes
显示只有一个
可能是使用ip连接的NameNode,如果是这样的话,需要在hdfs-site.xml
添加如下配置
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
进入管理界面,
live nodes
显示三个,点进去只显示一个,如下图
node列表以主机名+端口去重,三个节点的主机名都是localhost,端口又一样,因此只显示一个,解决方法是修改主机名或端口,本文中使用第一个
修改/etc/hostname
文件或使用命令hostnamectl set-hostname node1
修改三个节点的主机名,之后重启服务器
mr
说明
当前大数据技术下,很多框架封装了MapReduce,因此对于它了解即可
执行计算圆周率,进入/export/server/hadoop-3.3.0/share/hadoop/mapreduce/
目录,执行hadoop -jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
命令,后面两个参数可任意修改
问题记录
执行example的计算pi任务,进入管理界面,发现任务一直没有执行,或者进度长期没有变化
执行资源调度的是node1,之前设置了主机名,如果分配给node2节点执行,发起的url为node2:${port}
,此时node1节点并不知道它的实际地址,所以任务进度长期没有变化
在node1节点上修改/etc/hosts
文件,将所有节点的ip与主机名映射
执行example的计算pi任务,报异常
java.net.UnknownHostException: node3
只修改了node1映射,其他节点的映射也需要修改
hive
前提
- 启动mysql服务并配置可远程连接
- 整合hadoop,在
core-sile.xml
文件上,之前已经配置好了,见注释整合hive 用户代理设置
配置
本文使用hive版本为3.1.2,解压hive压缩包到任意目录,以/export/server/hive-3.1.2/
为例,文本中有关路径、网络地址、及MySQL配置信息等需要根据实际情况修改。
-
解决hive与hadoop之间guava版本差异
cd /export/server/hive-3.1.2/lib rm -rf guava-19.0.jar cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar .
-
修改配置文件,进入
conf
目录,将hive-env.sh.template
重命名为hive-env.sh
,添加以下配置 ``` vim hive-env.sh
export HADOOP_HOME=/export/server/hadoop-3.3.0 export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib ```
conf
目录下的hive-site.xml
,添加如下配置 ``` vim hive-site.xml
-
将mysql驱动放到hive安装包lib下,jar包名称为
mysql-connector-java-8.0.22.jar
,具体过程略 -
初始化hive 执行
bin/schematool -initSchema -dbType mysql -verbos --verbose
,如果出现Initialization script completed
,说明成功。查看MySQL,发现已经有hive3数据库,且数据表也初始化了 -
支持中文 如果对字段、表使用中文注释,查看时会发现显示
???
,这是因为没有设置UTF-8字符集,因此还需要对元数据表字段做一些调整ALTER TABLE `hive3`.`columns_v2` MODIFY COLUMN `COMMENT` varchar(256) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`table_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`partition_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`partition_keys` MODIFY COLUMN `PKEY_COMMENT` varchar(4000) CHARACTER SET utf8mb4; ALTER TABLE `hive3`.`index_params` MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4;
启动
``` nohup ./hive --service metastore &
nohup ./hive --service hiveserver2 &
``
hive默认开放两个端口。若启动成功,在浏览器输入
ip:10002,可查看后台页面;
10000端口使客户端以jdbc方式连接,连接地址为
jdbc:hive2://ip:10000`
连接
- beeline连接
java ./beeline -u jdbc:hive2://ip:10000 -n root 或者 ./beeline !connect jdbc:hive2://ip:10000 root
- 使用idea、dbeaver之类的软件连接,好处是写SQL时有智能提示