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中,下图为复制过去的结果


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
输入以下代码:
<configuration>
    <property>   
        <name>hadoop.tmp.dir</name>   
        <value>file:/usr/hadoop-2.7.3/hdfs/tmp</value>   
        <description>A base for other temporary directories.</description> 
    </property> 
    <property>  
        <name>io.file.buffer.size</name>   
        <value>131072</value> 
    </property> 
    <property>   
        <name>fs.defaultFS</name>  
        <value>hdfs://master:9000</value> </property>
</configuration>

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

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

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

注意:(其中第二个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

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

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

<configuration>
<!-- site specific YARN configuration properties -->    
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:18040</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:18030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:18025</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:18141</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:18088</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<configuration>

(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后看到:



如果在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配置属性见下:

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
     <name>javax.jdo.option.ConnectionDriverName</name>
     <value>com.mysql.jdbc.Driver</value>
</property>
<property>
       <name>javax.jdo.option.ConnectionUserName</name>
       <value>hive</value>
 </property>
 <property>
       <name>javax.jdo.option.ConnectionPassword</name>
       <value>hive</value>
 </property>
 <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
 </property>
</configuration>

其中,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中修改配置文件添加一下内容,显示当前数据库和表头

<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容