基于大数据学习在Linux上环境的搭建(持续更新中)

本文详细介绍了如何在Linux环境下搭建大数据基础环境,包括虚拟机配置、远程工具连接、Java安装、MySql、免密登录设置、Hadoop、HBase、Flume、Kafka和Spark的环境配置。此外,还讲解了NTP的搭建和计划任务的配置。

 

 

1.准备阶段

虚拟机、CRT/Xshell(终端模拟软件)、WinSCP(两个不同系统之间传输文件)

2. 基础环境搭建

  1. 创建新的虚拟机
  2. 自定义
  3. 安装程序光盘映像文件(iso)(需要网上下载)
  4. 一直下一步,等待
  5. 选英文,日期shanghai,系统的网络与主机名,点开查看配置环境需要的信息,在关闭,开始安装
  6. 安装完成后,重启,输入账号密码

Linux配置网卡
    命令:
        vi /etc/sysconfig/network-scripts/ifcfg-e按下tab不全命令
        如果进入的是一个空文件,命令写错了,直接:q退出
    1.刚进入,是一般模式,不能编辑内容
    2.按下i进入编辑模式
    3.把配置都补充完整
        修改:
        BOOTPROTO=static
        ONBOOT=yes
        添加:
        IPADDR=192.168.1.xx
        NETMASK=255.255.255.0
        GATEWAY=192.168.1.1
        DNS1=202.103.24.68
        DNS2=202.103.44.150
    4.按Esc,重新回到一般模式
    5.按:进入底部命令行,输入wq,按下回车
    6.重启网卡,让配置生效
        systemctl restart network
    7.ip a
    8.ping www.baidu.com
    9.ctrl+c停止ping

2.2远程工具链接Linux(CRT/Xshell)

这里选择的是CRT

  1. 修改主机名为hadoop1。 
     hostnamectl --static set-hostname hadoop1  
      断开连接重连后,@后面的名字改变。作用:当主机名和ip进行映射的时候就体现了。
  2. 修改主机名和ip地址的映射:修改/etc/hosts文件,在文件后面添加一行192.168.1.xx hadoop1,
    echo /etc/hosts >> 192.168.1.xx hadoop1
    作用:在Linux中,当需要输入ip地址的时候可以用名字代替,当需要修改的时候,只用改一个ip地址就行了(类似于java多态);ex:ssh
  3. windows上也可以配置主机名和ip的映射  C:\Windows\System32\drivers\etc\hosts文件,作用:在Window到Linux过程中,当需要输入ip地址的时候可以用名字代替;ex:使用CRT时
  4. 做这些都作用都是为了ssh免密登录,ssh可以远程登录到linux节点,公钥和私钥来配对,验证用户的身份,每个节点都会有一对公钥和私钥
  5. 每个节点使用命令
            ssh-keygen 四下enter,生成自己的公钥和私钥
  6. 每个节点使用三次命令,对三个节点进行免密登录的配置
            ssh-copy-id hadoop1/hadoop2/hadoop3(前提是/etc/hosts文件配置完成)

2.3Linux中java的安装

# 所有主机
# 首先将jdk包上传到/root目录下
cd  /root
mkdir /usr/lib/java/
tar zxvf /root/jdk-8u25-linux-x64.tar.gz  -C /usr/lib/java/
echo "export JAVA_HOME=/usr/lib/java/jdk1.8.0_25/" >>/etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin/' >>/etc/profile
source /etc/profile
java -version
rm -rf /root/jdk-8u25-linux-x64.tar.gz

如果java -version 显示为openjdk,那就卸载掉openjdk

2.4安装MySql

# 在hadoop1上
# 安装mysql
yum -y install  mariadb-server   mariadb
# 启动并设置开机自启
systemctl start mariadb.service
systemctl enable mariadb.service
# 进入mysql 并设置密码,默认为空
mysql -u root -p

2.5安装免密登录

    ssh可以远程登录到linux节点
    ssh: secure shell
    
    公钥和私钥来配对,验证用户的身份
    
    每个节点都会有一对公钥和私钥
    1.每个节点使用命令
        ssh-keygen 四下enter,生成自己的公钥和私钥
    2.每个节点使用三次命令,对三个节点进行免密登录的配置
        ssh-copy-id hadoop1/hadoop2/hadoop3(前提是/etc/hosts文件配置完成)

    若是以后又要新加免密登录,只要在新的上面重复上面的步骤

     查看免密登录的ip:/root/.ssh/konwn_hosts

2.6安装Hadoop

参考官网http://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/SingleCluster.html(但是我觉得对于新手还是很难看懂。。。还是对着官网流程总结一下)

  1. 三种运行模式
    1. 本地模式 standalone
                      不需要启动任何服务,直接使用命令去运行任务
    2. 伪分布式模式
                      运行规则和分布式一样,但是只运行在一个节点上
    3. 分布式模式
                      Hadoop的分布式运行规则完全执行,运行在多个节点上,每个节点交互
  2. 本地模式 standalone  
    不需要启动任何服务,直接使用命令去运行任务
        mkdir input
        cp etc/hadoop/*.xml input
        bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'
        cat output/*

    在hadoop-2.6.0下进行,作用是:分析单词出现的次数

  3. 伪分布式模式
    运行规则和分布式一样,但是只运行在一个节点上
    第一个要在配置文件core-site.xml里面加上下面的<name><value>

    [root@hadoop1 hadoop]# pwd
    /opt/programs/hadoop-2.6.0/etc/hadoop
    [root@hadoop1 hadoop]# vi core-site.xml 
    
    
    <!--
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop1:9000</value>
        </property>
    </configuration>
    
    --!>

    第二个要在配置文件hdfs-site.xml加上下面的代码

    [root@hadoop1 hadoop]# vi hdfs-site.xml 
    
    
    
    <!--
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/programs/hadoop-2.6.0/data/tmp</value>
        </property>
    </configuration>
    --!>

     在格式化文件系统:

     bin / hdfs namenode -format
    启动服务
           namenode:组长,hdfs的主节点
           datanode:小弟,提供保存数据服务的节点
           sbin/hadoop-daemon.sh start namenode
           sbin/hadoop-daemon.sh start datanode
    jps看一下守护进程
           namenode
           datanode
    使用webUI查看服务状态
           直接用浏览器访问地址
           hadoop1:50070
    
     

分布式模式
 Hadoop的分布式运行规则完全执行,运行在多个节点上,每个节点交互
以3个为例;hadoop1、hadoop2、hadoop3

上图就是分布式的思路
把主节点的
[root@hadoop1 hadoop]# pwd
/opt/programs/hadoop-2.6.0/etc/hadoop/slaves加上2个从节点(DataNode)的ip就可以了,从节点加上自己的ip,一般在运用中是把所有的ip都写上去

[root@hadoop1 hadoop]# cat slaves 
hadoop1
hadoop2
hadoop3

hdfs-site.xml中的配置


<configuration>
    <!--副本个数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--副本存放路径-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/programs/hadoop-2.6.0/data/tmp</value>
    </property>
    <!--设置secondary-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop3:50090</value>
    </property>
</configuration>

core-site.xml中的配置

<configuration>
    <!--定义了Hadoop文件系统的默认文件系统类别为“hdfs”-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
</configuration>

yarn-site.xml中的配置

<configuration>
<!--开启附属服务,因为运行yarn时,这个服务可能会用到,不开启运行不了-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<!-- 指定resourcemanager节点 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop2</value>
    </property>
<!-- 日志聚集功能开启 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>ture</value>
    </property>
<!-- 日志文件保存的时间,以秒为单位 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
<!-- Site specific YARN configuration properties -->
</configuration>

mapred-site.xml中的配置
    因为这个配置项系统只自带一个mapred-site.xml.template,里面写东西是无效的,所以要复制一个mapred-site.xml

 <configuration>
<!-- 配置为YARN的主节点的端口 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
<!-- 配置historyserver -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop3:19888</value>
    </property>
</configuration

2.7配置Hadoop-HA

2.7.1.hdfs-site.xml

<property>
	<!--对整个文件系统需要一个统称-->
	<name>dfs.nameservices</name>
	<value>ns1</value>
</property>
<property>
	<!--指明这个文件系统的namenode有哪些-->
	<name>dfs.ha.namenodes.ns1</name>
	<value>nn1,nn2</value>
</property>
<property>
	<!--指明nn1是哪个-->
	<name>dfs.namenode.rpc-address.ns1.nn1</name>
	<value>hadoop1:9000</value>
</property>
<property>
	<!--指明nn2是那个-->
	<name>dfs.namenode.rpc-address.ns1.nn2</name>
	<value>hadoop3:9000</value>
</property>

<property>
	<!--指明nn1访问地址端口-->
	<name>dfs.namenode.http-address.ns1.nn1</name>
	<value>hadoop1:50070</value>
</property>
<property>
	<!--指明nn2访问地址端口-->
	<name>dfs.namenode.http-address.ns1.nn2</name>
	<value>hadoop3:50070</value>
</property>
<property>
	<!--共享日志在journalnode上的共享端口-->
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns1</value>
</property>
    <!--配置edits在journalnode上的保存地址-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/programs/hadoop-2.6.0/data/tmp/dfs/jn</value>
</property>
<property>
	<!--配置proxy代理客户端-->
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

2.7.2.core-site.xml

<!--# 配置两个namenode的隔离策略
    # sshfence方式
    # 使用这种方式,必须实现ssh无密码登陆-->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://ns1</value>
</property>

2.7.3.安装必要的组件

yum -y install psmisc
	psmisc包含fuser,killall,pstree三个程序,且出现上述问题是由于我们在安装centos7的时候选择了最小化安装,默认是不安装psmics。
	fuser 显示使用指定文件或者文件系统的进程的PID。
	killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。
	pstree 树型显示当前运行的进程。

2.7.4.启动集群的方式

1.启动所有的journalnode
    sbin/hadoop-daemon.sh start journalnode
2.nn1格式化并启动
    bin/hdfs namenode -format
    sbin/hadoop-daemon.sh start namenode
3.在nn2上,同步nn1的元数据信息
    bin/hdfs namenode -bootstrapStandby
4.启动nn2
    sbin/hadoop-daemon.sh start namenode
5.启动datanode节点
    sbin/hadoop-daemon.sh start datanode
6.把节点设置为active
    bin/hdfs haadmin -transitionToActive nn1

2.7.5自动故障转移

hdfs-site.xml:
打开自动故障转移
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>

core-site.xml:
添加zookeeper的服务
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

2.7.6zookeeper安装

单机模式:
	修改conf/zoo.cfg下的datadir即可,表示的是存放数据的路径。
		datadir=/opt/programs/zookeeper-3.4.12/data/zkData
	启动
		bin/zkServer.sh start
	出现进程名为QuorumPeerMain即启动成功
		bin/zkServer.sh status,此时查看状态为standalone
	停止服务:bin/zkServer.sh stop
	
集群模式:
	1.配置文件需要自己增加集群选项
		表明集群有几台机器,并且指定和leader的端口号和参与投票的端口号
		server.1=hadoop1:2888:3888
		server.2=hadoop2:2888:3888
		server.3=hadoop3:2888:3888
	2.在每个节点上创建文件,表明本节点的编号,要和配置文件里面对应
		在data/zkData下创建文件myid,里面表明自己是哪个编号即可
		touch myid
	3.传输到别的节点上,并修改myid为对应的编号
	启动:
		只能每个节点单独启动脚本
		bin/zkServer.sh start
		每个节点启动了之后,可以查看各节点的角色
		bin/zkServer.sh status

2.7.7启动集群

1.关闭所有hdfs服务,同步修改的文件
2.启动zookeeper集群
3.初始化HA在zookeeper中的状态
	bin/hdfs zkfc -formatZK -force
4.启动hdfs服务
	如果直接一起启动出现通信错误,造成namenode停止,则需要先启动journalnode,再启动其他

//启动zkfc,先在哪台节点启动zkfc,那么哪台就是active
	sbin/hadoop-daemon.sh start zkfc

2.8HBase环境配置

1.前提:zookeeper配置完成

2.正常解压

3.环境配置

    hbase-site.xml 文件

 <property>
     <name>hbase.rootdir</name>
     <value>hdfs://hadoop1:9000/hbase</value>
 </property>
       <!--启用分布式集群-->
 <property>
     <name>hbase.cluster.distributed</name>
     <value>true</value>
 </property>
       <!--默认HMaster HTTP访问端口-->
 <property>
     <name>hbase.master.info.port</name>
     <value>16010</value>
 </property>
       <!--默认HRegionServer HTTP访问端口-->
 <property>
     <name>hbase.regionserver.info.port</name>
     <value>16030</value>
 </property>
 <property>
     <name>hbase.zookeeper.quorum</name>
     <value>hadoop1,hadoop2,hadoop3</value>
 </property>
 <property>
     <name>hbase.coprocessor.abortonerror</name>
     <value>false</value>
 </property>

      

   配置hbase-env.sh

export JAVA_HOME=/usr/lib/java/jdk1.8.0_25

export HBASE_CLASSPATH=/opt/programs/hadoop-2.6.0/etc/hadoop

export HBASE_MANAGES_ZK=false

export TZ="Asia/Shanghai"

配置regionservers

salve的ip

hadoop2
hadoop3

4.启动

start-hbase.sh

hbase shell进入

2.9Flume的环境配置

1.下载Flume的tar包下载地址,上传解压

2.环境配置
进入conf,复制flume-env.sh.template为flume-env.sh,进入flume-env.sh,添加JAVA_HOME的地址

3.添加环境变量
vi /etc/profile
根据安装目录添加,添加完成后source
可以通过flume-ng version查看flume的版本信息
4.Flume的使用
conf目录下创建.conf文件

启动命令:flume-ng agent --conf conf --name a1 --conf-file avro.conf &(最好写绝对路径)

2.10.KAFKA的环境配置

1.下载tar包,上传解压
2.环境变量配置
vi /etc/profile
3.环境配置
config下的server.properties
 


//(1)、配置 broker 的ID
broker.id=1 //第一个kafka配置为 1,第二个配置为2,以此类推
//(2)、打开监听端口
listeners=PLAINTEXT://192.168.195.132:9092 //尽量写ip地址,以免造成错误
//(3)、修改 log 的目录、在指定的位置创建好文件夹logs
log.dirs=/usr/local/kafka/logs
//(4)、修改 zookeeper.connect
尽量写ip地址,以免造成错误
zookeeper.connect=master:2181,slave1:2181,slave2:2181,slave3:2181
//(5)、网络线程数量
num.network.threads=3
//(6)Zookeeper每6秒监视kafka是否还活着
zookeeper.connection.timeout.ms=6000  //(默认)

4.执行的命令

启动:kafka-server-start.sh $KAFKA_HOME/config/server.properties &

创建topic:kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看topic:
kafka-topics.sh --list -zookeeper hadoop1:2181
生产者身份进行广播:kafka-console-producer.sh --broker-list 192.168.195.132:9092 --topic test
顾客身份进行访问:/kafka-console-consumer.sh --zookeeper 192.168.2.11:2181 --from-beginning --topic test  

2.11Spark的环境配置

1、下载安装包,tar安装

2、进入spark-env.sh

export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export SCALA_HOME=/usr/local/scala/scala-2.13.1
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
#单点
#export SPARK_MASTER_HOST=master
#高可用
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=master,slave1,slave2
-Dspark.deploy.zookeeper.dir=/spark"

export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_CORES=2
export SPARK_HOME=/usr/local/spark/spark-2.4.4-bin-hadoop2.7
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

3、slaves配置

hadoop1
hadoop2
hadoop3
4、/etc/profile配置

5、集群启动
 spark-shell --master spark://hadoop1:7077,hadoop2:7077,hadoop3:7077 --executor-memory 1g --total-executor-cores 4

 

3.基础环境以外的一些重要的配置

3.1NTP的搭建

3.1.1什么是NTP?

NTP是网络时间协议,它是用来同步网络中各个计算机的时间的协议。采用C/S架构。

3.1.2NTP的搭建

  1. yum -y install ntp
    直接yum下载
  2. 修改主机配置
    vi /etc/ntp.conf

    把如下四行代码注释掉

                server 0.centos.pool.ntp.org iburst
                server 1.centos.pool.ntp.org iburst
                server 2.centos.pool.ntp.org iburst
                server 3.centos.pool.ntp.org iburst

            在下面再添加一行

            server 127.127.1.0 iburst
            
            启动ntp服务
            systemctl start ntpd
            开机自启
            systemctl enable ntpd

  3. 配置其他主机
     

    vi /etc/ntp.conf

        #注释掉其他上游时间服务器
        #server 0.centos.pool.ntp.org iburst
        #server 1.centos.pool.ntp.org iburst
        #server 2.centos.pool.ntp.org iburst
        #server 3.centos.pool.ntp.org iburst
        #配置上游时间服务器为本地的ntpd Server服务器
        server 192.168.1.80
        #配置允许上游时间服务器主动修改本机的时间
        restrict 192.168.1.80 nomodify notrap noquery

  4.     与本地ntpd Server同步一下
        ntpdate -u 192.168.0.163
        systemctl start ntpd

3.2计划任务

3.2.1计划任务安装

yum -y install crontabs

3.2.2配置

vi /etc/crontab

    systemctl enable crond (设为开机启动)
    systemctl start crond(启动crond服务)
    systemctl status crond (查看状态)

    crontab /etc/crontab 使的配置文件生效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值