安装虚拟机CentOsCDH是Apache Hadoop和相关项目的最完整,经过测试的流行发行版。 CDH提供了Hadoop的核心元素(可扩展的存储和分布式计算 ),以及基于Web的用户界面和重要的企业功能。
我自己安装的是CentOs7的版本,下面资源里有镜像文件,还有VM虚拟机以及其他可能对你有用的文件。
相关配置 网络配置链接:https://pan.baidu.com/s/1rXpV1UyuL-Im5gSFiAOdUg
提取码:j20w
这一步的话主要就是在同一局域网内搭建好三台虚拟机,直接复制刚开始安装的一台就行。在虚拟机设置部分注意将网络连接选择NAT模式。
同时,在虚拟机网络设置部分也可以对VMnet8的子网进行设置,我使用的是192.168.169.0网段。
当然直接使用默认的就行,开机后查看ip即可。
ifconfig时间同步
集群中的机器万一时间不同步的话会给我们的任务带来一些问题,因此需要对集群中所有的机器配置时间同步服务。
yum install -y ntp systemctl start ntpd.service
开启同步服务后查看一下是否是同步状态。
ntpstat修改主机名
这一步的配置可以让集群中的机器互相通信。
vi /etc/hosts # 文件内容 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 节点1名称 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.169.x 节点1名称 192.168.169.x 节点2名称 192.168.169.x 节点3名称
设置完成之后相互之间进行ping,测试是否能相互通信
ping 节点名称关闭SElinux
SELinux 定义了每个人对系统上的应用、进程和文件的访问权限。它利用安全策略(一组告知 SELinux 哪些能访问,哪些不能访问的规则)来强制执行策略所允许的访问。
CDH需要关闭它,因为开启的话对文件的管理会造成影响。修改配置文件将SELINUX设置为disable。
vi /etc/selinux/config
修改完成后通过下面命令查看状态。
getenforce关闭防火墙
关闭防火墙并关闭防火墙开机自启动。
systemctl stop iptables.service systemctl disable iptables.service免密登录
配置好免密登录后主机间可以直接通过su+主机名相互登录。这里主要是通过rsa产生公私钥,公钥发送给其他主机,私钥自己留着。验证时用自己的私钥加密身份信息,对方通过公钥解密验证,成功即可登录。
# 生成公私钥 ssh-keygen -t rsa # 将公钥发给其他主机 ssh-copy-id 节点1名称 ssh-copy-id 节点2名称 ssh-copy-id 节点3名称JAVA安装
在安装前查看是否有残留的jdk。
rpm -qa | grep java # 有的话执行下面命令删除 rpm -e -nodeps xx
文章开头部分的资源链接有jdk包,通过xshell上传后进行解压。解压后修改配置文件。
tar zxvf jdk包名称 -C /usr/java # 修改配置文件 vi /etc/profile # 文件结尾处加上 # Java Home export JAVA_HOME=/usr/java/jdk名称 export PATH=$PATH:$JAVA_HOME/bin # 配置完查看java java -versionCDH本地仓库搭建
由于CDH目前闭源,所以下载CDH安装包会出现一些问题。经过很久的查找,终于找到了合适的解决方案。
(1)在/etc/yum.repos.d/目录下建个名为cloudera-cdh5.repo的文件。
(2)修改文件内容如下,费了很大的劲儿才找到的源。这样的话yum就可以使用cloudera的源了。
[cloudera-cdh5] # Packages for Cloudera's Distribution for Hadoop,Version 5,on RedHat or CentOS 6 x86_64name=cloudera's Distribution for Hadoop,Version 5 baseurl=https://ro-bucharest-repo.bigstepcloud.com/cloudera-repos/cdh5/redhat/6/x86_64/cdh/5/ gpgkey =https://ro-bucharest-repo.bigstepcloud.com/cloudera-repos/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera gpgcheck = 1
(3)下载两个工具用于后面本地源的搭建。
yum install -y yum-utils createrepo
(4)下载CDH文件到本地。(非常耗时)
reposync -r cloudera-cdh5
(5)安装https服务创建http的目录,并将CDH文件传到目录下。同时修改/etc/yum.repos.d/cloudera-cdh5.repo文件中的baserurl=http://节点1名称/cdh5。
# 安装https yum install -y httpd systemctl start httpd.service systemctl enable httpd.service # 创建目录并拷贝 mkdir -p /var/www/html/cdh5 cp -r cloudera-cdh5/RPM /var/www/html/cdh5/ cd /var/www/html/cdh5/ # 提供索引供外部使用 createrepo .Zookeeper安装
Hadoop依赖于Zookeeper,所以先安装Zookeeper。
# 下载 zookeeper yum install -y zookeeper zookeeper-server # 指定id,只能为数字。我的配置中node-1为1,node-2为2,node-3为3 service zookeeper-server init --myid==1 # 修改配置文件 vi /etc/zookeeper/conf/zoo.cfg # 配置文件结尾加上以下内容 server.1=节点1名称:2888:3888 server.2=节点2名称:2888:3888 server.3=节点3名称:2888:3888
上面的zoo.cfg文件中,2888代表与集群中Leader交换信息的端口号,3888代表假设集群中的Leader服务器挂掉后需要一个端口来进行选举,这个端口是用来执行选举时服务器相互通信的端口。
# 开启 zookeeper service zookeeper-server start # 启动成功后查看集群状态 zookeeper-server status
会发现node-1是leader节点,同时其他两个是follower节点。
主节点为node-1,从节点为node-2和node-3。
# 安装 hadooop # 主节点 yum -y install hadoop hadoop-yarn-resourcemanager hadoop-yarn-nodemanager hadoop-hdfs-secondarynamenode hadoop-hdfs-namenode hadoop-hdfs-datanode hadoop-mapreduce hadoop-mapreduce-historyserver hadoop-client # 从节点 yum -y install hadoop hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce hadoop-client
# 配置 hdfs # 进入配置文件夹,拷贝 conf(保留原始文件) cd /etc/hadoop cp -r conf.empty conf.itcast # 创建软连接并指定优先级 alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.itcast 50 # 确定关联 alternatives --set hadoop-conf /etc/hadoop/conf.itcast # 查看 hadoop-conf 的关联关系 alternatives --display hadoop-conf # 进入 conf.itcast并修改配置文件 cd conf.itcast vi core-site.xml # 添加内容vi hdfs-site.xml # 添加内容 fs.defaultFS hdfs://node-1:8020 dfs.namenode.name.dir file:///var/lib/hadoop-hdfs/cache/hdfs/dfs/name dfs.datanode.data.dir file:///var/lib/hadoop-hdfs/cache/hdfs/dfs/data dfs.permissions.superusergroup hadoop dfs.namenode.http-address node-1:50070 dfs.permissions.enabled false
# 创建所需要的目录 mkdir -p /var/lib/hadoop-hdfs/cache/hdfs/dfs/name mkdir -p /var/lib/hadoop-hdfs/cache/hdfs/dfs/data # 指定权限 chown -R hdfs:hdfs /var/lib/hadoop-hdfs/cache/hdfs/dfs/name chown -R hdfs:hdfs /var/lib/hadoop-hdfs/cache/hdfs/dfs/data chmod 700 /var/lib/hadoop-hdfs/cache/hdfs/dfs/name chmod 700 /var/lib/hadoop-hdfs/cache/hdfs/dfs/data # 主节点格式化 namenode sudo -u hdfs hdfs namenode -format # 主节点启动 service hadoop-hdfs-namenode start service hadoop-hdfs-secondarynamenode start # 从节点启动 service hadoop-hdfs-datanode start
# 修改和配置 Yarn 和 Mapreduce vi /etc/hadoop/conf.itcast/mapred-site.xmlMySQL安装mapreduce.framework.name yarn mapreduce.jobhistory.address node-1:10020 mapreduce.jobhistory.webapp.address node-1:19888 hadoop.proxyuser.mapred.groups * hadoop.proxyuser.mapred.hosts * vi /etc/hadoop/conf.itcast/yarn-site.xml yarn.app.mapreduce.am.staging-dir /user yarn.resourcemanager.hostname node-1 yarn.application.classpath $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*, $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*, $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*, $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/* yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.local-dirs file:///var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir yarn.nodemanager.log-dirs file:///var/log/hadoop-yarn/containers yarn.log.aggregation-enable true # 创建 Yarn 所需的数据目录 mkdir -p /var/lib/hadoop-yarn/cache mkdir -p /var/log/hadoop-yarn/containers mkdir -p /var/log/hadoop-yarn/apps # 赋予 Yarn 用户权限 chown -R yarn:yarn /var/lib/hadoop-yarn/cache /var/log/hadoop-yarn/containers /var/log/hadoop-yarn/apps # 为 MapReduce 准备 HDFS 上的目录 sudo -u hdfs hadoop fs -mkdir /tmp sudo -u hdfs hadoop fs -chmod -R 1777 /tmp sudo -u hdfs hadoop fs -mkdir -p /user/history sudo -u hdfs hadoop fs -chmod -R 1777 /user/history sudo -u hdfs hadoop fs -chown mapred:hadoop /user/history sudo -u hdfs hadoop fs -mkdir /user/$USER sudo -u hdfs hadoop fs -chown $USER /user/$USER # 启动 Yarn service hadoop-yarn-resourcemanager start service hadoop-mapreduce-historyserver start service hadoop-yarn-nodemanager start yarn.nodemanager.remote-app-log-dir hdfs:///var/log/hadoop-yarn/apps
和Hive配合使用。
# 下载 yum 源配置 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm # 安装 mysql yum install -y mysql-server
# 启动服务 systemctl start mysqld.service # 关闭强密码验证,方便自己用。实际工作中不用 vi /etc/my.cnf # 最后一行加上 validate_password=OFF # 重启 mysql systemctl restart mysqld.service # 设置密码 mysql_secure_installationHive安装
Hive 需要使用 MySQL 作为元数据库, 所以需要在 MySQL 为 Hive 创建用户, 创建对应的表。
(1)安装 Hive 软件包
yum install -y hive hive-metastore hive-server2 # 给 hive 一个 mysql 的 jdbc 包, hive 就能使用 mysql 作为元数据库 yum install -y mysql-connector-java # 创建软连接到 hive 下 ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar
(2)在 MySQL 中增加 Hive 用户
# 登录数据库 mysql -u root -p # 为 hive 创建 metastore 数据库 CREATE DATAbase metastore; USE metastore; # 创建 hive 用户,@‘%’表示在所有位置可以登录,本机登录的话是@‘localhost’ CREATE USER 'hive'@'%' IDENTIFIED BY 'hive'; # 赋权 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'%'; GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%'; FLUSH PRIVILEGES;
(3)配置 Hive
vi /etc/hive/conf/hive-site.xml # 配置文件javax.jdo.option.ConnectionURL jdbc:mysql://node-1/metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword hive datanucleus.autoCreateSchema false datanucleus.fixedDatastore true datanucleus.autoStartMechanism SchemaTable hive.metastore.uris thrift://node-1:9083 hive.metastore.schema.verification true hive.support.concurrency Enable Hive's Table Lock Manager Service true hive.support.concurrency true hive.zookeeper.quorum node-1
(4)初始化 Hive 在 MySQL 中的表结构
# 为 hive 初始化数据库, 创建必备的表和模式 /usr/lib/hive/bin/schematool -dbType mysql -initSchema -passWord hive -userName hive -url jdbc:my sql://node-1/metastore
(5)启动 Hive
service hive-metastore start service hive-server2 start # 通过 beeline 查看连接状态 beeline !connect jdbc:hive2://node-1:10000 username password org.apache.hive.jdbc.HiveDriver



