原生Hadoop大数据平台的搭建(包含伪分布式、完全分布式)

集群前提基本操作

静态网络配置

如果电脑已有则无需配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.116.11
#NETMASK=255.255.255.0
GATEWAY=192.168.116.2
HWADDR=max地址
DNS1=192.168.116.2
DNS2=8.8.8.8
#注意:不能与本地机ip重复
#注意:网卡名称不一定是ens33,但是一般都在network-scripts文件下,可以通过tab 或者ls查看文件夹来推测

配置完静态网络需重启网络

方法一:

service network restart

方法二:

ifdown ens33
ifup ens33

配置主机名

伪分布无需配置

hostnamectl set-hostname xxxx
su
​
or
​
vi /etc/hostname
​
#注意:主机名不能以数字开头

配置hosts映射

伪分布无需配置

vi /etc/hosts
​
ip地址 主机名
ip地址 主机名
ip地址 主机名

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
​
查看防火墙状态
sudo systemctl status firewalld

SSH免密

ssh-keygen -t rsa
ssh-copy-id root@l001
ssh-copy-id root@l002
ssh-copy-id root@l003

文件传输操作

scp -r xxx 主机名或IP:/xxx/xx

卸载原有的jdk,使用我们规定的版本

rpm -qa | grep jdk (查看)
rpm -e --nodeps 文件名 卸载jdk

============================

伪分布式

1.设置静态ip地址

2.关闭防火墙

3.SSH免密

4.解压并改名Hadoop和Jdk

解压Hadoop和Jdk

tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/src/
tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/src/

改名Hadoop和Jdk

mv hadoop-2.6.0 hadoop
mv jdk1.8.0_161/ jdk

5.环境变量

vi /etc/profile
​
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
​
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
​
source /etc/profile

测试是否配置成功

jps

hadoop

6.环境文件

core-site.xml

<configuration>
    <!-- 配置分布式文件系统的schema和ip以及port,默认8020-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost/</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <!-- 配置副本数,注意,伪分布模式只能是1。-->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk

7.格式化NN

hdfs namenode -format

8.启动和关闭

HDFS

start-dfs.sh
stop-dfs.sh

YARN

start-yarn.sh
stop-yarn.sh

所有

start-all.sh
stop-all.sh

9.jps查看守护进程

jps

NameNode

DataNode

SecondaryNameNode

ResourceManager

NodeManager

10.Web

hdfs:ip地址:50070

yarn:ip地址:8088

完全分布式

1.配置3台静态网络

2.配置3台主机名

3.配置3台hosts

4.关闭3台防火墙

5.SSH免密

6.解压并改名Hadoop和Jdk

解压Hadoop和Jdk

tar -xzvf hadoop-2.6.0.tar.gz -C /usr/local/src/
tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/local/src/

改名Hadoop和Jdk

mv hadoop-2.6.0 hadoop
mv jdk1.8.0_161 jdk

7.环境变量

vi /etc/profile
​
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
​
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
​
​
source /etc/profile
​
测试是否配置成功
​
jps
​
hadoop

7.1配置只对root用户生效的环境变量

vim /root/.bash_profile
​
添加内容:
​
export JAVA_HOME=/usr/local/java/jdk1.8.0_301/
PATH=.:$JAVA_HOME:$JAVA_HOME/bin:$PATH:$HOME/bin
​
使其生效:
​
source root/.bash_profile
​
#在每次使用时都需要执行环境生效命令

8.环境文件

core-site.xml

<configuration>
     <!-- hdfs的地址名称:schame,ip,port-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
    <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/tmp</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <!-- 块的副本数,默认是3-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

mapred-site.xml

复制mapred-site.xml.template而来

<configuration>
    <!-- 指定mapreduce使用yarn资源管理器-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
    <!-- 指定yarn的shuffle技术-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定resourcemanager的主机名-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property> 
</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk

slaves

master
slave1
slave2

9.scp进行同步

scp -r ./hadoop slave1:/usr/local/src/
scp -r ./hadoop slave2:/usr/local/src/
​
scp -r ./jdk slave1:/usr/local/src/
scp -r ./jdk slave2:/usr/local/src/
​
scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/

更新另外两台的环境文件

source /etc/profile

10.格式化NameNode

[master ~]# hdfs namenode -format

11.启动和关闭

HDFS

start-dfs.sh
stop-dfs.sh

YARN

start-yarn.sh
stop-yarn.sh

所有

start-all.sh
stop-all.sh

12.jps查看守护进程

master:

NameNoe

DataNode

ResourceManager

NodeManager

slave1:

DataNode

NodeManager

slave2:

DataNode

NodeManager

============================

HA高可用(hdfs)

1.配置3台静态网络

2.配置3台主机名

3.配置3台hosts

4.关闭3台防火墙

5.SSH免密

6.解压并改名安装包

tar -xzvf hadoop-2.6.0.tar.gz -C /usr/local/src/
tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/local/src/
tar -xzvf zookeeper-3.4.5.tar.gz -C /usr/local/src/
mv hadoop-2.6.0/ hadoop
mv jdk1.8.0_161/ jdk
mv zookeeper-3.4.5/ zookeeper

7.环境变量

vi /etc/profile
​
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export ZOOKEEPER_HOME=/opt/apps/zookeeper
​
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile

测试是否配置成功

jps

hadoop

8.配置zk

zoo.cfg

cp  zoo_sample.cfg  zoo.cfg   #复制出zoo.cfg文件
vi zoo.cfg

dataDir=/usr/local/src/zookeeper/zkData
#修改zookeeper的存储路径,zkData目录一会要创建出来

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
# 添加三个服务器节点

myid

#回到zk目录
mkdir zkData
cd zkData
echo "1" >> myid
cat myid

9.scp分配

scp -r zookeeper slave1:/usr/local/src/
scp -r zookeeper slave2:/usr/local/src/
​
scp -r jdk slave1:/usr/local/src/
scp -r jdk slave2:/usr/local/src/
​
scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/

更新其他机器环境变量 source /etc/profile

10.修改其他myid

11.启动zookeeper

三台都启动zk

zkServer.sh start

JMX enabled by default Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED

启动完毕后查看状态

zkServer.sh status

2个follower

1个 leader

11.1遇到的问题

nohup: 无法运行命令"/opt/apps/hadoop/bin/java": 没有那个文件或目录
​
解决办法:
​
进入bin目录下,vim zkServer.sh,在最顶端添加、
​
export JAVA_HOME=/opt/module/jdk1.8.0_144
再分发给其它机器重新启动即可

12.配置Hadoop

core-site.xml

<configuration>
     <!-- 指定hdfs的ha的域名,注意这个是hdfs-site.xml文件里配置的逻辑名称 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://c1</value>
    </property>
     <!-- 指定hdfs的数据存储位置,此路径一旦指定,会被其他属性使用和依赖-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/tmp</value>
    </property>
    <!-- 指定journalnode的数据存储位置-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/src/hadoop/tmp</value>
    </property>
    <!-- 指定zookeeper集群的服务器节点,如果没有搭建zookeeper,请参考zookeeper知识模块-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
     <!-- 指定块文件的复本个数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
     <!-- 指定ha的名称服务:即逻辑名称-->
    <property>
        <name>dfs.nameservices</name>
        <value>c1</value>
    </property>
     <!-- 指定ha的两个namenode的唯一标识符-->
    <property>
        <name>dfs.ha.namenodes.c1</name>
        <value>nn1,nn2</value>
    </property>
     <!-- 指定两个唯一标识符,对应的主机和端口号-->
    <property>
        <name>dfs.namenode.rpc-address.c1.nn1</name>
        <value>master:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.c1.nn2</name>
        <value>slave1:8020</value>
    </property>
      <!-- 指定两个唯一标识符,对应的web地址的主机和端口号-->
    <property>
        <name>dfs.namenode.http-address.c1.nn1</name>
        <value>master:50070</value>
    </property>
​
    <property>
        <name>dfs.namenode.http-address.c1.nn2</name>
        <value>slave1:50070</value>
    </property>
     <!-- 指定journalnode集群的服务器ip、port和存储目录-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/journalData</value>
    </property>
     <!-- 指定客户端联系Active节点的java类-->
    <property>
        <name>dfs.client.failover.proxy.provider.c1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
     <!-- 指定防止脑裂的防护机制,注意centos 7很可能会因为少一些内置命令而失效-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence
            shell(/bin/true)</value> 
    </property>
     <!-- 指定防火机制进行免密登陆的私钥-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--  start  automatic-failover -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk

yarn-env.sh

export JAVA_HOME=/usr/local/src/jdk

slaves

master
slave1
slave2

13.分发Hadoop

scp -r hadoop slave1:/usr/local/src/
scp -r hadoop slave2:/usr/local/src/

14.HA启动

  • 注意前提需要保证三台ZK是启动的

zkServer.sh start
  • 启动三个节点上的journalnode服务

hadoop-daemon.sh start journalnode
  • 格式化NN

hdfs namenode -format
  • master单独启动NN

hadoop-daemon.sh start namenode
  • 在另一台namenode上拉取已格式化的那台机器的镜像文件

hdfs namenode -bootstrapStandby
  • 然后关闭已经启动的NN

hadoop-daemon.sh stop namenode
  • 在master上格式化zkfc

hdfs zkfc -formatZK
  • 启动HA

start-all.sh

注意:以后开HA集群的时候,要先开zk,再开HDFS

15.jps查看守护进程

master:

ResourceManager DFSZKFailoverController DataNode NameNode JournalNode NodeManager QuorumPeerMain

slave1:

DFSZKFailoverController QuorumPeerMain JournalNode DataNode NodeManager NameNode

slave2:

NodeManager QuorumPeerMain DataNode JournalNode

hive安装

Mysql的安装

#查看是否存在
rpm -qa | grep mariadb
​
#存在则卸载
yum -y remove mari*
​
#并删除文件
sudo rm -rf /var/lib/mysql/*
​
#首先安装mysql服务端,在安装客户端。注意在centos7最小安装上需要添加 --force
rpm -ivh --force --nodeps MySQL-server-5.5.47-1.linux2.6.x86_64.rpm
​
rpm -ivh --force --nodeps MySQL-client-5.5.47-1.linux2.6.x86_64.rpm
​
#启动mysql,并查看版本
rpm -e postgresql-libs
​
systemctl start mysqld
systemctl status mysqld
​
service mysql start
mysql -V
​
#设置成开机启动(比赛可不用)
chkconfig --add mysql
chkconfig mysql on
​
#进入到mysql,进行权限配置(权限数据存在mysql库user表中)
update mysql.user set password=PASSWORD('root') where User='root';#(密码字段默认会进行加密)
​
#比赛可不用配置
update mysql.user set host = '%' where user = 'root' and host = '127.0.0.1';
​
#刷新权限使其生效
flush privileges;
​
#查询用户所拥有的访问权限信息的命令如下:
select host,user,password from mysql.user;
​
#创建hive库
create database hive;
#or加上默认编码
create database hive DEFAULT CHARACTER SET latin1/utf8;
​

hive的安装

#解压安装包
tar –zxvf apache-hive-1.1.0-bin.tar.gz

配置环境变量

export HIVE_HOME=/opt/apps/hive
export PATH=$HIVE_HOME/bin:$PATH
​
#是环境变量生效
source /etc/profile

hive文件配置

进入配置文件目录:
# >cd /home/bigdata/hive/conf
​
将hive-default.xml.template文件拷贝并重命名成hive-site.xml:
# >mv hive-default.xml.template hive-site.xml
#清空文件中<configuration></configuration>之间的内容并加入下列内容:
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.169.136:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    #访问mysql用户名
    <value>root</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    #mysql数据库密码
    <value>root</value>
</property>

将Mysql的驱动jar包添加到hive的lib目录下

mv ./mysql-connector-java-5.0.8-bin.jar /opt/apps/hive/lib

如果使用hive语句报错为(无法实例化)

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
​
#在检查文件与mysql权限等,都无错的情况下,可能需要初始化元数据库
#首先进入到conf目录下面删除 metastore_db
rm -rf $HIVE_HOME/conf/metastore_db
​
schematool -initSchema -dbType derby
​
#还没用可以试试关闭安全模式

hadoop关闭安全模式

#关闭安全模式
hdfs dfsadmin -safemode leave
#查看是否是安全模式
hdfs dfsadmin -safemode get

sqoop安装

配置Mysql连接器

#将mysql的java connector复制到依赖库中,其中,第3、4行是一行代码(需要在一行中键入这两行的内容,每行之间使用空格隔开,然后键入回车执行)
​
cp mysql-connector-java-5.1.28.jar sqoop/lib/
cp mysql-connector-java-5.1.28.bin.jar sqoop/lib/

配置环境变量

export SQOOP_HOME=/opt/apps/sqoop
export PATH=$SQOOP_HOME/bin:$SQOOP_HOME/conf:$PATH
​
#是环境变量生效
source /etc/profile

文件配置

cd ~/sqoop/conf
#复制文件,改变文件名
cp sqoop-env-template.sh sqoop-env.sh
​
#进入 sqoop-env.sh
#进行添加文件路径

如遇到hdfs导出到mysql报错

ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@402e37bc is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
​
则需要在语句中添加mysql驱动
​
--driver com.mysql.jdbc.Driver
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值