2020-03-26补记录:hadoop集群的搭建和建hive

之前自己尝试搭建hadoop,在word上面作了笔记,不过在公司电脑里,想看的时候会不太方便,所以把笔记放到这里来,记录一下自己所学的知识

hadoop集群搭建

1、建立虚拟机

注意:以下操作在master上操作,同时在另外两台机上一样的操作
这里建立了3台虚拟机:master、slave1、slave2,一个主节点,两个从节点
建立的3台虚拟机的网关ip要一样,ip地址修改按顺序(在虚拟机编辑器中可以查看nat模式查看网关ip和子掩码)
(1)查看主机ip地址:ifconfig
(2)修改网络配置文件,将BOOTPROTO值修改为”static”
输入命令:

[root@master ~]  vim  /etc/sysconfig/network-scripts/ifcfg-eth0
        
DEVICE(网卡名称)=eth0
ONBOOT=yes  #(开启网卡)
BOOTPROTO=static/none #(表示静态,dhcp表示动态)
#(静态必须有以下几项,动态不必填写)
IPADDR=192.168.189.16 #(ip地址)
NETMASK=255.255.255.0 #(子网掩码)
GATEWAY=192.168.189.2 #(网关)
HWADDR #(网卡的物理地址)自动生成可不写

(3)重启网络服务:service network restart
(4)更改主机名称:vim / etc/sysconfig/network (重启后永久生效)

2、建立主机和各ip的映射

输入命令:vim /etc/hosts 修改如下内容:ip地址 主机名
另外两台同样操作,再互相ping看看是否ping通(例如:ping slave1)

image.png

3、配置ssh免密码登录

注意:以下操作命令都在master主机上进行操作
(1)在root用户下输入命令:ssh-keygen -t rsa 一路回车

[root@master ~]  cd  ~/.ssh #进入到~/.ssh目录

(2)秘钥生成后在~/.ssh目录下,有两个文件id_rsa(私钥)和id_rsa.pub(公钥),将公钥复制到authorized_keys并赋予authorized_keys 600权限

[root@master ~]  cat  ~/.ssh/id_rsa.pub  >>  /.ssh/authorized_keys
[root@master ~] chmod 600  /.ssh/authorized_keys

(3)同理在另外两台机上面同样的操作,然后将两台机上面的公钥复制到master节点上的authorized_keys中,下图为复制过去的结果


2020-03-26补记录:hadoop集群的搭建和建hive_第1张图片
image.png

(4)将master节点上的authorized_keys远程输送到slave1和slave2的~/.ssh目录下

输入命令:scp ~/.ssh/authorized_keys root@slave1:~/.ssh

(5)检查是否免密登录

在master上输入命令:ssh slave1
在slave1上输入命令:ssh slave2

4、关闭防火墙

在master上输入命令:

chkconfig --list | grep iptables
vim /etc/selinux/config 修改SELINUX=disabled

5、安装JDK

注意:所有节点都要安装Java并配置java环境变量
(1)下载好jdk的安装包(这里下载的是jdk1.8.0-161.gz.tar),拖入linux中,在xshell中用rz命令进行上传:

在xsell工具中如果没有rz、sz命令需要安装服务:
安装服务:yum -y install lrzsz
上传:rz
下载:sz

(2)解压压缩包:tar -xzvf jdk1.8.0-161.tar.gz 压缩在/usr/java/目录下

(3)在/etc/profile文件中添加jdk的路径,配置环境jdk环境(根据自己的文件路径)

  export  JAVA_HOME =/usr/java/ jdk1.8.0-161 (jdk的文件目录路径)
  export  JRE_HOME=$JAVA_HOME/jre
  export  CLASSPATH=.:$JAVA_HOME/lib/dt.java: $ JAVA_HOME/lib/tools.jar
  export    PATH=$ JAVA_HOME/bin:$PATH

(4)使配置文件立即生效,输入命令:source /etc/profile
检查是否安装成功:java –version (出现版本信息则安装成功)

6、安装mysql(在主节点上安装)

(1)查询系统已经安装的mysql

输入命令:rmp -qa | grep mysql

(2)彻底删除卸载mysql及其所有依赖的包

输入命令:rmp –e --nodeps mysql–libs…(这里为系统安装的mysql,前面查询的时候有)

(3)解压mysql(自己下载的,这里下载的是mysql-5.6.45-linux-glibc2.12-x86-64.tar.gz),将解压的文件改名为mysql,放在目录/usr/local/下
(4)创建mysql用户

a.先检查是否存在mysql组下面的mysql用户:groups mysql
b.没有则创建,有则跳过:useradd -r mysql
c.然后检查是否创建成功:groups mysql

(5)在mysql文件夹目录data下创建一个文件夹mysql,用以保存mysql数据,将属组改为mysql:chown -R mysql:mysql mysql
(6)初始化数据库
进入到mysql/scripts目录,输入命令:

./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/ussr/local/mysql/data
这里如果报错,解决方法如下:
a.先安装perl:yum install –y perl perl-devel autoconf
b.再出错,安装libaio:yum install -y libaio

安装后再执行初始化

(7)修改配置文件

a.将mysql/support-files/目录下的my-default.cnf 复制带/etc/my.cnf
b.将mysql/support-files/目录下的mysql.server复制到/etc/init.d/mysqld,然后授予执行权限(755)
c.重新编辑mysqld文件,设置两个值
输入命令:vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

(8)配置环境变量,目的是在任意地方都可以执行mysql命令

     原:export  PATH=$JAVA_HOME/bin:$PATH
     修改为:export  PATH=$JAVA_HOME/bin:/usr/local/mysql/bin:$PATH

(source一下配置文件立即生效)

(9)启动mysql

service mysql start 启动
service mysql stop 停止
service mysql status 查看状态

(10)进入/usr/local/mysql/bin目录,修改root密码为App12345(登录mysql的密码)

输入命令:./mysqladmin -u root -password ‘App12345’
进入mysql:mysql -uroot -p (之后输入密码)

注:此时如果出现-bash:mysql:command not found
原因:由于系统默认会查找/usr/bin下的命令,如果命令不在该目录下就会找不到命令,此时需要映射一个链接到/usr/bin目录下,首先得知道mysql命令或者是mysqladmin命令的完整路径:/usr/local/mysql/bin/mysql
输入命令:ln -s /usr/local/mysql/bin/mysql /usr/bin

(11)设置允许外界访问,清楚空数据
进入msyql页面:

    >use mysql; 
    >select host,user from user;
    >delete from user where user=’ ‘;
    >update user set host=’%’ where user=’root’ and host=’localhost’;  #(设置host为%,允许所以主机访问该数据库)
    >select host,user from user;
    >flush privileges; #(刷新)

(12)开启防火墙

firewall –cmd --permanent--query-port=3306/tcp (检查端口3306是否开放)
firewall –cmd --permanent—add-port=3306/tcp (开放3306端口)
firewall –cmd --reload (刷新防火墙)

7、搭建集群

(1)新建hadoop用户及其用户组

adduser hadoop
passwd hadoop

(2)将新建的hadoop用户添加到hadoop用户组

usermod -a -G hadoop hadoop (组 名)

(3)赋予hadoop用户root权限

vim /etc/sudoer
加上:hadoop ALL=(ALL) ALL

(4)安装hadoop并配置环境(每一个节点都进行相同配置,可以在主机操作然后复制)

a.将hadoop包放在/usr/目录下并解压
b.配置环境变量在/etc/profil里添加:

    export  HADOOP_HOME=/usr/hadoop-2.7.3
    export  PATH=$JAVA_HOME/bin:$ HADOOP_HOME/bin:$PATH (加上hadoop的路径)

(5)准备工作

在master节点上创建以下文件夹
/usr/hadoop-2.7.3/hdfs/name
/usr/hadoop-2.7.3/hdfs/data
/usr/hadoop-2.7.3/hdfs/tmp

(6)配置hadoop文件
接下来配置/usr/hadoop-2.7.3/etc/hadoop/目录下的文件,有7个:
①-------配置slaves 文件
把原本的localhost删掉,改为slave1、slave2
②-------配置hadoop-env.sh文件
将JAVA_HOME文件配置为本机JAVA_HOME路径
export JAVA_HOME=/usr/java/jdk1.8.0_161


image.png

③------配置 yarn-env.sh
将其中的JAVA_HOME修改为本机JAVA_HOME路径(先把这一行的#去掉)


image.png

④---------配置core-site.xml
输入以下代码:

       
        hadoop.tmp.dir   
        file:/usr/hadoop-2.7.3/hdfs/tmp   
        A base for other temporary directories. 
     
      
        io.file.buffer.size   
        131072 
     
       
        fs.defaultFS  
        hdfs://master:9000 

注意:第一个属性中的value和我们之前创建的/hadoop-2.7.3/hdfs/tmp路径要一致。

⑤-------配置hdfs-site.xml
输入以下代码:


    
        dfs.replication
        2
    
    
        dfs.namenode.name.dir
        file:/usr/hadoop-2.7.3/hdfs/name
        true
    
    
        dfs.datanode.data.dir
        file:/usr/hadoop-2.7.3/hdfs/data
        true 
    
    
        dfs.namenode.secondary.http-address   
        master:9001 
     
       
        dfs.webhdfs.enabled   
        true 
     
       
        dfs.permissions   
        false 
    

注意:(其中第二个dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致;因为这里只有一个从主机slave1,slave2,所以dfs.replication设置为2)

⑥--------配置mapred-site.xml
复制mapred-site.xml.template文件,并命名为mapred-site.xml


    
        mapreduce.framework.name
        yarn
    

⑦---------配置yarn-site.xml


    
    
        yarn.nodemanager.aux-services.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler
    
    
        yarn.resourcemanager.address
        master:18040
    
    
        yarn.resourcemanager.scheduler.address
        master:18030
    
    
        yarn.resourcemanager.resource-tracker.address
        master:18025
    
    
        yarn.resourcemanager.admin.address
        master:18141
    
    
        yarn.resourcemanager.webapp.address
        master:18088
    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

(7)配置hadoop的环境
根据hadoop文件夹的路径配置:vim /etc/profile

export HADOOP_HOME=/usr/hadoop-2.7.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

键入命令 source /etc/profile 使配置立即生

(8)接下来,将hadoop传到slave1、slave2虚拟机上面去,传过去后,在slave1、slave2上面同样对hadoop进行路径配置(和第(7)步一样)

    scp  -r  /usr/hadoop-2.7.3/  root@slave1:/usr/
    scp  -r  /usr/hadoop-2.7.3/  root@slave2:/usr/

使配置文件立即实行:source /etc/profile

8、运行hadoop

(1)格式化Namenode

./bin/hdfs namenode -format

(2)查询hadoop:安装成功


(3)启动集群
两种方法:(/usr/hadoop-2.7.3/sbin/目录下)

start-all.sh
先start-dfs.sh,再start-yarn.sh

如果在mater上面键入jps后看到:


2020-03-26补记录:hadoop集群的搭建和建hive_第2张图片

如果在slave1上面键入jps后看到:



则说明集群搭建成功

(4)进行测试
①上传文件到hdfs:hadoop fs –put test.txt /hdfs
②用自带的样例测试hadoop集群能不能正常跑任务:

hadoop jar /usr/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  pi 10 10

9、附录(在搭建过程中遇到的问题进行了一些总结)

问题一:启动集群异常:

1、namenode没有正常启动
出现原因:①core-site.xml文件中tmp文件的路径错误,此时把路径修改正确即可,修改完后hadoop namenode –format初始化namenode。
2、datanode没有正常启动
出现原因:datanode的clusterID和namenode的clusterID不匹配。打开hdfs-site.xml里配置的datanode和namenode对应的目录,分别打开hdfs目录下data和name文件下的current文件夹里的VERSION,可以看到clusterID正如日志里记录的一样,确实不一致。
修改datanode(hdfs/data/current)里VERSION文件的clusterID与namenode(hdfs/name/current)里的一致,再重新启动dfs(执行start-all.sh)再执行jps命令可以看到datanode已正常启动。

问题二:出现错误信息提示:could only be replicated to 0 nodes, instead of 1

产生这样的错误原因有多种,这里列举出以下四种常用的解决方法以供参考:
①确保master(namenode) 、slaves(datanode)的防火墙已经关闭。
②确保DFS空间的使用情况,即不处于安全模式
③Hadoop的hadoop.tmp.dir的路径是否正确

一些命令:
查看安全状态:hadoop dfsadmin -safemode get
退出安全状态:hadoop dfsadmin -safemode leave
进入安全状态:hadoop dfsadmin -safemode enter
查看防火墙状态:systemctl status firewalld
service iptables status
暂时关闭防火墙:systemctl stop firewalld
service iptables stop
永久关闭防火墙:systemctl disable firewalld
chkconfig iptables off
重启防火墙:systemctl enable firewalld
service iptables restart
永久关闭后重启:chkconfig iptables on

搭建hive

Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据。其在Hadoop的架构体系中承担了一个SQL解析的过程,它提供了对外的入口来获取用户的指令然后对指令进行分析,解析出一个MapReduce程序组成可执行计划,并按照该计划生成对应的MapReduce任务提交给Hadoop集群处理,获取最终的结果。元数据——如表模式——存储在名为metastore的数据库中。

1、解压压缩包

可先在master上安装,然后分发到其他节点中。 登录master 将Hive安装包拷贝到home/hadoop/下并解压,并将解压文件名改为hive。

输入命令:tar –zxvf apache-hive-0.13.1-bin.tar.gz

2、设置环境变量

Hive使用环境变量HADOOP_HOME来制定Hadoop的所有相关JAR和配置文件

#set Hive environment
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin

备注:HIVE_HOME的路径设置为HIVE的安装路径,依据自己的情况修改。

3、Metastore

metastore是Hive元数据集中存放地。它包括两部分:服务和后台数据存储。有三种方式配置metastore:内嵌metastore、本地metastore以及远程metastore。这里采用mysql作为hive的metastore。
(1)登录mysql
(2)创建用户hive@master(密码hive)并分配权限

①创建用户hive:create user ‘hive’ identified by ‘hive’;
②在mysql上创建hive元数据库,并对hive进行授权
create database hive;
grant all privileges on hive to ‘hive’@’%’ identified by ‘hive’;
grant all privileges on hive to ‘hive’@’master’ identified by ‘hive’;
grant all privileges on hive to ‘hive’@’localhost’ identified by ‘hive’;
③刷新:flush privileges;

(3)用户名hive登录

mysql -h master -uhive

(4)其他可能会用到的命令

①查看MYSQL数据库中所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
②查看用户是否设置了密码
mysql>; select user,host,password from mysql.user;

4、hive配置

Hive使用和Hadoop类似的XML配置文件进行设置,配置文件为hive/conf/hive-site.xml。几个较为重要的metastore配置属性见下:

2020-03-26补记录:hadoop集群的搭建和建hive_第3张图片

(1)修改配置文件
进入到hive的配置文件目录下,找到hive-default.xml.template,另存为hive-site.xml并修改参数。
Hive 系统会加载两个配置文件一个默认配置文件“hive-default.xml”,另一个就是用户自定义文件“hive-site.xml”。当“hive-site.xml”中的配置参数的值与“hive-default.xml”文件中不一致时,以用户自定义的为准。所以可将不需要的参数都删除掉,只留下下面所示的内容





    javax.jdo.option.ConnectionURL
jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true


     javax.jdo.option.ConnectionDriverName
     com.mysql.jdbc.Driver


       javax.jdo.option.ConnectionUserName
       hive
 
 
       javax.jdo.option.ConnectionPassword
       hive
 
 
        hive.metastore.warehouse.dir
        /user/hive/warehouse
 

其中,MySQL的端口号3306为默认端口号,具体可在MySQL的配置文件my.cnf中查看。

(2)拷贝JDBC驱动包
把MySQL的JDBC驱动包复制到Hive的lib目录下(mysql-connector-java),mysql-connector-java需要自己下载
(3)分发HIVE
拷贝Hive目录到其他所有slave节点上,并且安装目录跟master上一致,同时配置环境变量
注意:在hiv-site.xml中修改配置文件添加一下内容,显示当前数据库和表头


hive.cli.print.header
true
Whether to print the names of the columns in query output.


hive.cli.print.current.db
true
Whether to include the current database in the Hive prompt.

5、测试hive

在命令行直接输入hive即可进入hive页面(这里要启动hadoop和mysql服务)。
1.需要知道现在的hadoop中的HDFS存了什么
输入命令:hadoop fs -lsr /

  1. 进入hive并创建一个测试库和测试表
    进入hive:hive
    创建库:create database hive_1;
  2. 查询一下HDFS有什么变化:会多了一个库hive_1
    4.查看mysql中的hive库有什么变化:

use hive;
select * from DBS;

你可能感兴趣的:(2020-03-26补记录:hadoop集群的搭建和建hive)