前言
本文演示环境在 CentOS 6.5 下,具体大数据组件的版本在下面会具体标注。
Hadoop 伪分布式环境搭建
- 安装 Hadoop 前需要提前安装好 JDK,JDK 的安装可见 CentOS 6.5常用软件安装 中的 JDK 安装步骤
- Hadoop 版本 hadoop-2.6.0-cdh5.7.0,点我下载
- 创建 hadoop 用户,在 hadoop 用户的家目录下分别创建
- app(存放解压后的文件夹)
- software(存放软件压缩包)
- data(存放数据文件)
- log(存放日志文件)
- 将下载好的 tar 包上传到 software 目录下,解压到当前目录,创建一个到 app 目录的软连接
# 新建 hadoop 用户,切换到 hadoop 的家目录
useradd hadoop
su - hadoop
# 创建存放不同文件的目录
mkdir app software data log
# 将文件通过 rz 命令或者图形化 SFTP 客户端上传到 software 文件夹下并解压
tar -xzvf hadoop-2.6.0-cdh5.7.0.tar.gz
# 做一个软连接到 app 文件夹,注意不在同级目录下做软连接使用全路径
ln -s /home/hadoop/software/hadoop-2.6.0-cdh5.7.0 /home/hadoop/app/hadoop
# 配置 Hadoop 环境变量
vi ~/.bash_profile
HADOOP_HOME=~/app/hadoop
PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
- 配置 hadoop-env
# 在 app 目录下,进入 hadoop 的配置文件保存路径
cd hadoop/etc/hadoop/
# 由于在 linux 环境下,删除所有 .cmd 的文件
rm -rf *.cmd
# 编辑 hadoop-env.sh
vi hadoop-env.sh
# 修改其中的JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_45
# dn, nn, snn 的pid文件默认保存在/tmp目录下,里面保存了pid,启动时需要读取该pid
[root@hadoop001 tmp]# ll
total 12
-rw-rw-r--. 1 hadoop hadoop 5 Jul 6 17:47 hadoop-hadoop-datanode.pid
-rw-rw-r--. 1 hadoop hadoop 5 Jul 6 17:47 hadoop-hadoop-namenode.pid
-rw-rw-r--. 1 hadoop hadoop 5 Jul 6 17:47 hadoop-hadoop-secondarynamenode.pid
# 由于 Linux 环境下的 /tmp 目录 30 天清空一次,所以要重新指定一个 pid 文件存储位置
# 注释掉原来的 HADOOP_PID_DIR,指定为一个新的路径
export HADOOP_PID_DIR=/data/tmp
- 配置 core-site.xml
# 在 /etc/hadoop 目录下,修改 core-site.xml
vi core-site.xml
# 在 Configuration 节点下,添加一个 property,保存退出
# 注意使用 hostname,不要使用 ip
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:9000</value>
</property>
- 修改slaves
# 在 /etc/hadoop 目录下,修改 slaves
vi slaves
# 将 localhost 更改为 hostname
hadoop001
- 配置 hdfs-site.xml
# 在 /etc/hadoop 目录下,修改 hdfs-site.xml
vi hdfs-site.xml
# 备份数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
# 指定 snn 的地址为 hostname:port
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop001:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop001:50091</value>
</property>
- 配置 mapred-site.xml
# 复制一份示例文件
cp mapred-site.xml.template mapred-site.xml
# 修改文件
vi mapred-site.xml
# 添加配置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 配置 yarn-site.xml
# 编辑yarn-site.xml
vi yarn-site.xml
# 添加配置
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 配置无密码认证
# 测试 ssh localhost,发现需要登录认证且需要输入密码
ssh localhost
# 示例
# The authenticity of host 'localhost (::1)' can't be established.
# RSA key fingerprint is af:5f:7d:c7:e0:f0:d1:dd:b3:fd:06:f2:30:57:80:80.
# Are you sure you want to continue connecting (yes/no)?
# 输入 no 退出
# 执行 ssh-keygen,三次回车
ssh-keygen
# 进入 .ssh 目录中,追加生成新文件,将新文件的权限改为600
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
# 执行ssh测试,第一次执行需要输入 yes,发现不需要输入密码也可以登录
# 如果地址前面没有指定用户,默认使用当前用户登录远程机器 ssh id@ip
# ssh localhost 登录 localhost
# ssh localhost date 登录 localhost,执行 date 命令,然后返回结果,不会切换到 ssh 的机器
ssh localhost date
- 格式化HDFS文件系统
# 在 app/hadoop 目录下
bin/hdfs namenode -format
# 启动服务,使用 jps 可以查看启动了三个进程
sbin/start-dfs.sh
# 示例
# [hadoop@hadoop001 hadoop]$ jps
# 13297 Jps
# 13010 DataNode
# 12919 NameNode
# 13194 SecondaryNameNode
# 在浏览器访问 Hadoop 的Web界面,默认端口为50070
IP:50070
# 在上方 Navbar 的 Utilities 中选择Browse the file system 可以查看 hdfs 上的文件
- 测试 hdfs 是否能正常使用
# 在 hdfs 级联创建一个目录
bin/hdfs dfs -mkdir -p /user/hadoop
# 将 etc/hadoop 下的文件都上传到 /user/hadoop 的 input 目录下
# 如果给定 hdfs 上的路径是一个相对路径,那么会上传到 /user/<username> 下
bin/hdfs dfs -put etc/hadoop input
# 执行一个 MapReduce 作业
# 将 input 目录中的内容作为输入,筛选出以 dfs 开头的字符串,然后输出到 output 目录中
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
# 查看执行结果
bin/hdfs dfs -cat output/*
# 停止服务
sbin/stop-dfs.sh
- 启动 yarn 服务
# 启动 yarn
sbin/start-yarn.sh
# 查看进程
# 8069 NodeManager
# 7977 ResourceManager
# 在浏览器可以打开yarn的web界面查看
# http://hadoop001:8088/cluster
Hive部署
- 由于 Hive 是构建在 Hadoop 之上的数据仓库,所以需要先安装好 Hadoop 并启动,Hadoop 的安装过程见上面的 Hadoop 部分;同时 Hive 的元数据存储在 MySQL 中,所以还需要安装好 MySQL
- Hive 版本 hive-1.1.0-cdh5.15.1.tar.gz, 点我下载
- 使用Hadoop用户,将下载好的 tar 包上传到 software 目录下,解压到当前目录,创建一个到 app 目录的软连接,配置环境变量
# 切换到 Hadoop 用户
su - hadoop
# 将压缩包上传到 software 目录,解压到当前目录
tar -xzvf hive-1.1.0-cdh5.15.1.tar.gz
# 切换到 app 目录,创建一个软连接
ln -s /home/hadoop/software/hive-1.1.0-cdh5.15.1 hive
# 配置 HIVE_HOME
vi ~/.bash_profile
HIVE_HOME=~/app/hive
PATH=${HIVE_HOME}/bin:$PATH
- 将 MySQL 的 JDBC 驱动(点我下载)放到 HIVE_HOME 的 lib 目录下
- 配置 hive-env.sh 文件,如果已经在环境变量中配置了 HADOOP_HOME,则可以不用配置该文件;如果没有,则需要把 conf 目录下该文件的 template 文件拷贝一份,重命名为 hive-env.sh,修改其中的 HADOOP_HOME 即可
- 新建 hive-site.xml 文件,按照MySQL的配置修改
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- JDBC URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/zhihandata?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
</property>
<!-- JDBC DRIVER -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- JDBC USERNAME -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- JDBC PASSWORD -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive命令行显示当前数据库名 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- Hive命令行显示列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
</configuration>
- 启动 hive
# 命令行输入 hive 即可启动,首先保证 mysql 和 hadoop 服务都已经正常启动
hive
# 能顺利显示
# hive (default)>
# 代表正常启动
sqoop 部署
- sqoop 是一个用于 RDBMS 和 Hadoop 平台(HDFS / Hive / HBase)之间导入导出的一个工具,其中导入导出是以 Hadoop 平台为基点来说
- sqoop版本分为1.x(1.4.x)和 2.x(1.99.x),2.x的版本基本不用,这里使用 1.4.6 版本的sqoop,点我下载
- 使用Hadoop用户,将下载好的 tar 包上传到 software 目录下,解压到当前目录,创建一个到 app 目录的软连接,配置环境变量
# 切换到 Hadoop 用户
su - hadoop
# 将压缩包上传到 software 目录,解压到当前目录
tar -xzvf sqoop-1.4.6-cdh5.15.1.tar.gz
# 切换到 app 目录,创建一个软连接
ln -s /home/hadoop/software/sqoop-1.4.6-cdh5.15.1 sqoop
# 配置 SQOOP_HOME
vi ~/.bash_profile
SQOOP_HOME=~/app/sqoop
PATH=${SQOOP_HOME}/bin:$PATH
# 使新的环境变量生效
source ~/.bash_profile
- 进入 SQOOP_HOME 的conf目录,配置 sqoop-env 文件
# 拷贝 conf 目录下的 env 示例文件
cp sqoop-env-template.sh sqoop-env.sh
# 指定 HADOOP_HOME 和 HIVE_HOME
export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop
export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop
export HIVE_HOME=/home/hadoop/app/hive
-
将需要的几个jar包拷贝到sqoop的lib目录下
-
运行sqoop help,查看是否能正常启动
# 成功安装
[hadoop@hadoop001 ~]$ sqoop help
Warning: /home/hadoop/software/sqoop-1.4.6-cdh5.15.1/bin/../../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /home/hadoop/software/sqoop-1.4.6-cdh5.15.1/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/software/sqoop-1.4.6-cdh5.15.1/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /home/hadoop/software/sqoop-1.4.6-cdh5.15.1/bin/../../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
19/07/29 20:59:00 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.15.1
usage: sqoop COMMAND [ARGS]
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
See 'sqoop help COMMAND' for information on a specific command.