Hadoop搭建
Hadoop的搭建有三种方式
单机版适合开发调试;伪分布式版,适合模拟集群学习;
完全分布式,生产使用的模式。
搭建完全分布式的hadoop集群,一个主节点,三个数据节点为例来讲解。
基础环境
环境准备
1、软件版本
四台服务器配置,系统:centos6.5、内存:1G、硬盘:20G
四台服务器分配的IP地址:192.168.0.71/72/73/74
规划:71用作主节点用作hadoop-master,其它三台为数据节点72、73、74用作hadoop-salve1~3
jdk和生成保持一致使用1.7版本
hadoop使用2.7.3版本,下载地址:http://apache.claz.org/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
2、host配置和主机名(四台)
修改四台服务器的hosts文件
vim /etc/hosts
192.168.0.71 hadoop-master
192.168.0.72 hadoop-slave1
192.168.0.73 hadoop-slave2
192.168.0.74 hadoop-slave3
分别斯塔服务器的主机名:HOSTNAME,master为例说明
vi /etc/sysconfig/network
HOSTNAME=hadoop-master
执行reboot后生效,完成之后依次修改其它salve服务器为: hadoop-slave1~3。
3、服务器安装jdk(四台)
建议使用yum安装jdk,也可以自行下载安装
yum -y install java-1.7.0-openjdk*
配置环境变量,修改配置文件vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使用souce命令让立刻生效
source /etc/profile
免密登陆
一、首先关闭四台服务器的防火墙和SELINUX
查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
chkconfig iptables off
关闭SELINUX后,需要重启服务器
-- 关闭SELINUX
# vim /etc/selinux/config
-- 注释掉
#SELINUX=enforcing
#SELINUXTYPE=targeted
-- 添加
SELINUX=disabled
二、免密码登录本机
下面以配置hadoop-master本机无密码登录为例进行讲解,用户需参照下面步骤完成h-salve1~3三台子节点机器的本机无密码登录;
1)生产秘钥
ssh-keygen -t rsa
2)将公钥追加到”authorized_keys”文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)赋予权限
chmod 600 .ssh/authorized_keys
4)验证本机能无密码访问
ssh hadoop-master
最后,依次配置h-salve1~3无密码访问
二、hadoop-master本机无密码登录hadoop-slave1、hadoop-slave2、hadoop-slave3,以hadoop-master无密码登录hadoop-slave1为例进行讲解:
1)登录hadoop-slave1 ,复制hadoop-master服务器的公钥”id_rsa.pub”到hadoop-slave1服务器的”root”目录下。
scp root@hadoop-master:/root/.ssh/id_rsa.pub /root/
2)将hadoop-master的公钥(id_rsa.pub)追加到hadoop-slave1的authorized_keys中
cat id_rsa.pub >> .ssh/authorized_keys
rm -rf id_rsa.pub
3)在 hadoop-master上面测试
ssh hadoop-slave1
三、配置hadoop-slave1~hadoop-slave3本机无密码登录hadoop-master
下面以hadoop-slave1无密码登录hadoop-master为例进行讲解,用户需参照下面步骤完成hadoop-slave2~hadoop-slave3无密码登录hadoop-master。
1)登录hadoop-master,复制hadoop-slave1服务器的公钥”id_rsa.pub”到hadoop-master服务器的”/root/”目录下。
scp root@hadoop-slave1:/root/.ssh/id_rsa.pub /root/
2)将hadoop-slave1的公钥(id_rsa.pub)追加到hadoop-master的authorized_keys中。
cat id_rsa.pub >> .ssh/authorized_keys
rm -rf id_rsa.pub //删除id_rsa.pub
3)在 hadoop-slave1上面测试
ssh hadoop-master
依次配置 hadoop-slave2、hadoop-slave3
到此主从的无密登录已经完成了。
Hadoop环境搭建
配置hadoop-master的hadoop环境
1、hadoop-master上 解压缩安装包及创建基本目录
#下载
wget http://apache.claz.org/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
#解压
tar -xzvf hadoop-2.7.3.tar.gz -C /usr/local
#重命名
mv hadoop-2.7.3 hadoop
2、 配置hadoop-master的hadoop环境变量
1)配置环境变量,修改配置文件vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
使得hadoop命令在当前终端立即生效
source /etc/profile
下面配置,文件都在:/usr/local/hadoop/etc/hadoop路径下
2、配置core-site.xml
修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml,通过fs.default.name指定NameNode的IP地址和端口号,通过hadoop.tmp.dir指定hadoop数据存储的临时文件夹。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
特别注意:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。
3、配置hdfs-site.xml:
修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml,通过dfs.replication指定HDFS的备份因子为3,通过dfs.name.dir指定namenode节点的文件存储目录,通过dfs.data.dir指定datanode节点的文件存储目录。
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
4、配置mapred-site.xml
拷贝mapred-site.xml.template为mapred-site.xml,在进行修改
cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop-master:9001</value>
</property>
</configuration>
5、配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
</configuration>
6、配置masters文件
修改/usr/local/hadoop/etc/hadoop/masters文件,该文件指定namenode节点所在的服务器机器。删除localhost,添加namenode节点的主机名hadoop-master;不建议使用IP地址,因为IP地址可能会变化,但是主机名一般不会变化。
vi /usr/local/hadoop/etc/hadoop/masters
## 内容
hadoop-master
7、配置slaves文件(Master主机特有)
修改/usr/local/hadoop/etc/hadoop/slaves文件,该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名,如下所示。
vi /usr/local/hadoop/etc/hadoop/slaves
## 内容
hadoop-slave1
hadoop-slave2
hadoop-slave3
配置hadoop-slave的hadoop环境
下面以配置hadoop-slave1的hadoop为例进行演示,用户需参照以下步骤完成其他hadoop-slave2~3服务器的配置。
1)复制hadoop到hadoop-slave1节点
scp -r /usr/local/hadoop hadoop-slave1:/usr/local/
登录hadoop-slave1服务器,删除slaves内容
rm -rf /usr/local/hadoop/etc/hadoop/slaves
2)配置环境变量
vi /etc/profile
## 内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
使得hadoop命令在当前终端立即生效;
source /etc/profile
依次配置其它slave服务
启动集群
1、格式化HDFS文件系统
进入master的~/hadoop目录,执行以下操作
bin/hadoop namenode -format
格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
2、然后启动hadoop:
sbin/start-all.sh
3、使用jps命令查看运行情况
#master 执行 jps查看运行情况
25928 SecondaryNameNode
25742 NameNode
26387 Jps
26078 ResourceManager
#slave 执行 jps查看运行情况
24002 NodeManager
23899 DataNode
24179 Jps
4、命令查看Hadoop集群的状态
通过简单的jps命令虽然可以查看HDFS文件管理系统、MapReduce服务是否启动成功,但是无法查看到Hadoop整个集群的运行状态。我们可以通过hadoop dfsadmin -report进行查看。用该命令可以快速定位出哪些节点挂掉了,HDFS的容量以及使用了多少,以及每个节点的硬盘使用情况。
hadoop dfsadmin -report
输出结果:
Configured Capacity: 50108030976 (46.67 GB)
Present Capacity: 41877471232 (39.00 GB)
DFS Remaining: 41877385216 (39.00 GB)
DFS Used: 86016 (84 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
2016届
Ubuntu 14.04 LTS上安装部署Hadoop 2.7.1(伪分布式)
任务1-3
- 安装Ubuntu14.04LTS
下载ubuntu-14.04.1-desktop-amd64.iso,根据提示一步一步安装,用户为Hadoop用户,密码为Hadoop。
- 配置ssh免密码登录
安装ssh server:sudo apt-get install openssh-server
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys # 加入授权
使用ssh localhost试试能否直接登录
- 配置JDK
下载jdk-7u79-linux-x64.tar.gz
将JDK安装至/usr/lib/jvm下,所以先到/usr/lib/目录下建立jvm文件夹
cd /usr/lib/ 打开/usr/lib文件夹
sudo mkdir jvm 创建jvm文件
解压下载的安装包至jvm文件夹(jdk1.7.0_79)
sudo tar zxvf ~/下载/jdk-7u79-linux-x64.tar.gz -C /usr/lib/jvm(由于我的所有文件都放在下载这个文件夹中,所以我的地址为~/下载,下面Hadoop同步)
设置JAVA_HOME:
sudo gedit ~/.bashrc
在第一行前面增加:export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79,保存退出。
立即生效:source ~/.bashrc
测试JAVA_HOME是否设置成功,输出了上面设置的路径表示成功:
echo $JAVA_HOME
- 安装Hadoop2.7.1
sudo tar -zxvf ~/下载/hadoop-2.7.1.tar.gz -C /usr/local (将Hadoop2.7.1解压放在/usr/local目录下)
cd /usr/local/
sudo mv ./hadoop-2.7.1/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R linuxidc ./hadoop # 修改文件权限
sudo gedit ~/.bashrc
打开界面后,在之前配置的JAVA_HOME后面输入:
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
立即生效:source ~/.bashrc
- 配置伪分布式
切换至配置文件目录: cd /usr/local/hadoop/etc/hadoop
sudo gedit core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
sudo gedit hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
sudo gedit yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
mv mapred-site.xml.template mapred-site.xml更换名字
sudo gedit mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 启动/停止hadoop
到这里Hadoop2.7.1伪分布式就已经配置好了,现在来进行启动。启动之前需要将格式化。
hdfs namenode –format
倒数第五行出现Exitting with status 0 表示成功,若为 Exitting with status 1 则是出错。
start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
hadoop-daemons.sh start namenode 单独启动NameNode守护进程
hadoop-daemons.sh stop namenode 单独停止NameNode守护进程
hadoop-daemons.sh start datanode 单独启动DataNode守护进程
hadoop-daemons.sh stop datanode 单独停止DataNode守护进程
hadoop-daemons.sh startsecondarynamenode单独启动SecondaryNameNode守护进程
hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程
start-mapred.sh 启动Hadoop MapReduce守护进程JobTracker和TaskTracker
stop-mapred.sh 停止Hadoop MapReduce守护进程JobTracker和TaskTracker
hadoop-daemons.sh start jobtracker 单独启动JobTracker守护进程
hadoop-daemons.sh stop jobtracker 单独停止JobTracker守护进程
hadoop-daemons.sh start tasktracker 单独启动TaskTracker守护进程
hadoop-daemons.sh stop tasktracker 单独启动TaskTracker守护进程
jps 查看
完整进程如下:
2583 DataNode
2970 ResourceManager
3461 Jps
3177 NodeManager
2361 NameNode
2840 SecondaryNam
若执行jps后提示:
程序 'jps' 已包含在下列软件包中:
* default-jdk
* ecj
* gcj-4.6-jdk
* openjdk-6-jdk
* gcj-4.5-jdk
* openjdk-7-jdk
请尝试:sudo apt-get install <选定的软件包>
那么请执行下面命令,手动设置系统默认JDK:
Sudo update-alternatives --install /usr/bin/jps jps /usr/lib/jvm/jdk1.7.0_79/bin/jps 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 300
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 300
再次执行jps就不会出现提示了。
任务1-2
启动Hadoop
hdfs dfs -mkdir -p /user/hadoop (要使用当前用户的用户名)
hdf s dfs -mkdir -p /input hdfs创建input目录
hdfs dfs -put ~/下载/dat0102.dat /input/ 将本地文件dat0102.dat导入到HDFSinput目录中
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-
examples-2.7.1.jar grep /input/dat0102.dat/ /output/ "HDFS"
调用Hadoop jar包来查询dat0102.dat中的HDFS字段出现的次数,并保存在output目录下
hdfs dfs -cat /output/part-r-00000 输出hdfs字段出现的次数
任务1-3
Hadoop 平台进行性能调优
在yarn-site.xml添加以下代码
sudo gedit yarn-site.xml
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
在mapred-site.xml添加如下带代码
sudo gedit mapred-site.xml
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx768m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx1536m</value>
</property>
任务2-4
- 安装hive2.1.1
sudo tar -zxvf ~/下载/apache-hive-2.1.1-bin.tar.gz -C /usr/local
cd /usr/local/
sudo mv apache-hive-2.1.1-bin hive # 将文件夹名改为hive
sudo chown -R hadoop:hadoop hive # 修改文件权限
- 配置hive环境
sudo apt-get install vim 安装vim
vim ~/.bashrc
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
source ~/.bashrc
- 配置Hive
运行 Hive 之前需要使用以下命令修改配置文件:
cd /usr/local/hive/conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
- 修改hive-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 ##Java路径
export HADOOP_HOME=/usr/local/hadoop ##Hadoop安装路径
export HIVE_HOME=/usr/local/hive ##Hive安装路径
export HIVE_CONF_DIR=/usr/local/hive/conf ##Hive配置文件路径
- 创建HDFS目录
在 Hive 中创建表之前需要创建以下 HDFS 目录并给它们赋相应的权限。
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
hdfs dfs -chmod g+w /user/hive/warehouse
hdfs dfs -chmod g+w /user/hive/tmp
hdfs dfs -chmod g+w /user/hive/log
- 修改hive-site.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://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
</configuration>
- 安装并配置mysql
sudo apt-get install mysql-server #安装mysql
service mysql start 启动MySQL
service mysql stop 停止MySQL
sudo netstat -tap | grep mysql 查看是否启动成功
mysql -u root –p 进入MySQL shell 页面
- 创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。
mysql> CREATE DATABASE hive;
mysql> USE hive;
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> quit;
- 安装MySQL jdbc包
tar -zxvf ~/下载/mysql-connector-java-5.1.39.tar.gz –c /usr/local/hive解压
cp /usr/local/hive/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40 -bin.jar /usr/local/hive/lib #将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下
- 运行之前先初始化操作
schematool -initSchema -dbType mysql
- 启动hadoop
start-all.sh
- 启动hive
hive
- 用hive命令创建数据表
hive>drop table if exists student ;
hive>CREATE TABLE student(
hive>id int,
hive>name string)
hive>ROW FORMAT DELIMITED
hive>FIELDS TERMINATED BY ',';
- 将文件上传到hdfs中的目录下
hdfs dfs -mkdir -p /user/hive/abc 创建目录
hdfs dfs -put ~/下载/stu.txt /user/hive/abc
- 加载数据
hive>load data inpath '/user/hive/abc/stu.txt' overwrite into table student ;
- 查询数据
hive>select * from student ;