Hadoop伪分布式集群与Hive

Hadoop伪分布式集群与Hive


1. Hadoop介绍:

hadoop是一个使用Java开发的大数据框架,主要解决两个问题:大数据的存储、大数据的计算。

1.1 大数据

数据量级是PB以上的数据。 1PB=1024TB

大数据的存储:分布式存储

大数据的计算:分布式计算

1.2 Hadoop模块

  • common : 公共模块,主要提供工具类。主要是为下面的三个模块提供支持。
  • hdfs : 分布式文件系统。主要解决分布式存储问题。hadoop至今仍大量应用的模块。
  1. ​ namenode : 名称节点
  2. ​ datenode : 数据节点
  3. ​ secondarynamenode : 辅助名称节点
  • yarn : 分布式调度模块。主要用来将计算模型(mapreduce、spark、pig、hive)。
  1. ​ resourcemanager : yarn主节点
  2. ​ nodemanager : yarn的子节点
  • mapreduce :计算模型,聚合与化简。现在基本没人用了。使用HiveQL 、 Pig、 spark 替代了。

1.3 Hadoop实用脚本

启动脚本

  • start-all.sh : 同时启动hdfs和yarn
  • start-dfs.sh : 启动hdfs
  • star-yarn.sh : 启动yarn

关闭脚本

  • stop-all.sh : 关闭hdfs和yarn
  • stop-dfs.sh : 关闭hdfs
  • stop-yarn.sh : 关闭yarn

1.4 Hadoop的集群模式

  • 本地模式
  • 伪分布式 : 测试环境,用最小的代价复刻生产环境的功能。
  • 完全分布式 : 生产环境,最少一台namenode、三台datanode、一台secondary namenode。

2. Hadoop搭建过程

2.1 上传各种安装包

java运行环境: jdk-8u91-linux-x64.rpm

hadoop安装包:hadoop-2.7.3.tar.gz

2.2 安装Java的运行环境

1.安装java的rpm包

rpm -ivh jdk-8u91-linux-x64.rpm

制作符号连接

ln -s jdk1.8.0_91 jdk

2.配置java的环境变量

#1. 编辑系统配置文件 /etc/profile 或 ~/.bash_profile 设置PATH变量
vi  /etc/profile
# Java
export JAVA_HOME=/usr/java/jdk
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

#2. 使/etc/profile立即生效
source /etc/profile

#3. 测试Java是否安装成功
java -version

2.3 准备工作

搭建一个Hadoop的伪分布式测试环境。只需要一台服务器即可。

#1. 设置主机名
hostname master

#2. IP固定
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR="192.168.177.133"
NETMASK="255.255.255.0"
GATEWAY="192.168.177.2"
DNS1="114.114.114.114"
DNS2="8.8.8.8"
ONBOOT="yes"

service network restart 

#3. 设置IP域名
vi /etc/hosts
192.168.177.201 master
192.168.177.202 slave1
192.168.177.203 slave1
192.168.177.204 slave1

#4. 设置ssh无密码连接
ssh master 
ssh-keygen -t rsa 
ssh-copy-id master

2.4 安装hadoop

2.4.1 解压缩
#1. 解压缩hadoop.2.7.3.tar.gz
tar -xvf hadoop-2.7.3.tar.gz

#2. 建立符号连接
ln -s hadoop-2.7.3 hadoop
2.4.2 设置hadoop的环境变量
#1. 编辑/etc/profile
vi /etc/profile

#2. 输入以下内容到尾部
# Hadoop
export HADOOP_HOME=/opt/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#3. 环境变量立即生效
source /etc/profile
2.4.3 设置hadoop-env.sh
#1. 打开文件
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

#2. 修改第25行内容
export JAVA_HOME=/usr/java/jdk
2.4.4 修改hadoop的配置文件
  • core-site.xml : common模块的配置
  <!-- 指定namenode节点所在机器的IP, 9000端口是hdfs的通信端口 -->
  <!-- namenode通过该端口发号命令给datanode -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>

  <!-- 存放hadoop运行过程中的临时文件 -->
  <!-- 如果没有tmp目录,则创建 : mkdir -p $HADOOP_HOME/tmp -->
  <property> 
    <name>hadoop.tmp.dir</name>
    <value>/opt/soft/hadoop/tmp</value>
  </property>
  • hdfs-site.xml : 配置hdfs
  <!-- 副本数量: 1个 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  • yarn-site.xml
  <!-- 指定mapreduce计算模型默认调度器为yarn -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  • mapred-site.xml
  <!-- 指定运行mapreduce时,yarn的主节点 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>
  
  <!-- shuffle : 分发算法 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
2.4.5 测试是否搭建成功
#1. 初始化namenode
  hdfs namenode -format
#2. 启动hdfs
  start-dfs.sh
#3. 启动yarn
  start-yarn.sh
#4. 查看进程
  jps 
#5. 观察端口开放端口
  netstat -ntlp | grep 50070
#6. 防火墙开放端口
  firewall-cmd --zone=public --add-port=50070/tcp --permanent
  firewall-cmd --zone=public --add-port=8088/tcp --permanent
  firewall-cmd --reload
#7. windows浏览器中访问hdfs的webUI
  http://192.168.177.133:50070
#8. windows浏览器访问yarn的webUI
  http://192.168.177.133:8088

搭建Hive数仓

1. Hive介绍

Hive是基于hadoop的HDFS模块的数据仓库,我们使用Hive替代MapReduce作为大数据计算模型。

2. Hive搭建过程

2.1 上传安装Hive所需要的安装包:

2.2 安装Mysql数据库:

2.2.1 安装Mysql自动配置的库
yum -y install autoconf
2.2.2 删除Mysql的残留文件
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs
2.2.3 创建Mysql的用户&用户组
useradd mysql
2.2.4 解压缩Mysql的安装包:
#1. 将Mysql的tar.gz压缩包移动到/usr/local目录下
mv /opt/soft/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz /usr/local/

#2. 解压缩mysql包, 并创建Mysql的符号连接
cd /usr/local/
tar -xvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.6.35-linux-glibc2.5-x86_64 mysql
2.2.5 编写Mysql配置文件/etc/my.cnf
#1. 编辑my.cnf
vi /etc/my.cnf

#2. 在文件中添加以下内容:
[mysql]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
bind-address=0.0.0.0
port=3306
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
2.2.6 创建必要的文件或目录
#1. 通信文件
mkdir -p /var/lib/mysql
touch /var/lib/mysql/my.sock

#2. 数据目录
mkdir -p /usr/local/mysql/data

#3. 授权
chown mysql:mysql -R /var/lib/mysql 
chown mysql:mysql -R /usr/local/mysql-5.6.35-linux-glibc2.5-x86_64
chmod 777 /etc/my.cnf
2.2.7 安装Mysql
#1. 进入到Mysql主目录
cd /usr/local/mysql

#2. 执行安装脚本
./scripts/mysql_install_db --user=mysql
2.2.8 设置Mysql的开机自启动

在安装Mysql之后,在/usr/local/mysql目录下有support-files(支持文件)。有一个mysql.server文件是Mysql的服务脚本。

#1. 将mysql.server文件复制到/etc/rc.d/init.d/目录下,就可以通过service命令控制Mysql服务
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

#2. 手动启动、关闭、查看Mysql服务
service mysqld start   启动Mysql服务
service mysqld stop    关闭Mysql服务
service mysqld status  查看Mysql服务的状态

#3. 验证Mysqld服务是否开启
netstat -nltp | grep 3306

#4. 设置Mysql的环境变量
vi /etc/profile
底部输入:
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin

source /etc/profile

#5. 登录Mysql命令行 , 直接回车,进入Mysql命令行
mysql -u root -p
2.2.9 对Mysql进行初始化
#1. 设置Mysql的root用户密码
use mysql;
update user set authentication_string=password('root') where user='root';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');

#2. 打开Mysql远程连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES ;

#3. 端口开放
iptables : iptables -t filter -I INPUT -p tcp --dport 3306 -j ACCEPT
firewall : firewall-cmd --zone=public --add-port=3306/tcp --permanent
		   firewall-cmd --reload
2.2.10 通过Navicat远程连接Mysql数据库,建库
  1. 远程连接

  2. 创建hive数据库

​ Mysql下的hive数据库后期作为Hive的元数据库(metadata database)

2.3 安装Hive

2.3.1 解压Hive
tar -xvf apache-hive-2.1.1-bin.tar.gz
2.3.2 配置Hive的环境变量
#1. 编辑/etc/profile
vi /etc/profile

#2 在下方加入以下内容
export HIVE_HOME=/opt/soft/hive
export PATH=$PATH:$HIVE_HOME/bin

#3. 立即生效
source /etc/profile
2.3.3 修改hive-site.xml配置文件
  1. 将Mysql连接包复制到Hive目录下的lib目录
cp /opt/soft/mysql-connector-java-5.1.27-bin.jar /opt/soft/hive/lib/
  1. 配置Hive-site.xml
cd /opt/soft/hive/conf
cp hive-default.xml.template hive-site.xml
  1. 设置Mysql数据库连接信息

【注意】 搜索=左边的单词,该单词在中,修改

# 设置Mysql连接驱动
javax.jdo.option.ConnectionDriverName = com.mysql.jdbc.Driver
# 设置Mysql的连接字符串
javax.jdo.option.ConnectionURL = jdbc:mysql://master:3306/hive
# 设置Mysql的登录用户名
javax.jdo.option.ConnectionUserName = root
# 设置Mysql的登录密码
javax.jdo.option.ConnectionPassword = root
  1. Hive的本地临时文件目录配置(log日志)

    手动创建Hive的临时目录: mkdir -p /opt/soft/hive/tmp

hive.exec.local.scratchdir = /opt/soft/hive/tmp
  1. 设置Hive在HDFS中保存数据使用的目录warehouse
#1. 在hdfs上面创建warehouse
hdfs dfs -mkdir -p /root/hive/warehouse
hdfs dfs -chmod 777 /root/hive
hdfs dfs -chmod 777 /root/hive/warehouse

#2. 在hive-site中修改设置
# hive主目录设置
hive.exec.scratchdir = /root/hive 

# hive文件目录设置
hive.metastore.warehouse.dir = /root/hive/warehouse
  1. 将hive-site.xml中出现的所有${system:user.name} 改为root 2个位置

​ 将hive-site.xml中出现的所有${system:java.io.tmpdir} 改为/root/hive 3个位置

  1. 修改hive下载路径
hive.downloaded.resources.dir=/root/hive/_resources

-- 示例:
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/root/hive/_resources</value>
</property>
2.3.4 设置hive-env.sh
#1. 在/opt/soft/hive/conf目录下复制hive-env.sh
cp /opt/soft/hive/conf/hive-env.sh.template /opt/soft/hive/conf/hive-env.sh

#2. 修改内容
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/opt/soft/hadoop

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/soft/hive/conf

# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/opt/soft/hive/lib

2.3.5 初始化hive
schematool -dbType mysql -initSchema
2.3.6 验证Hive是否安装成功
hive
Logo

更多推荐