集群前提基本操作
静态网络配置
如果电脑已有则无需配置
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