小工具      在线工具  汉语词典  css  js  c++  java

hadoop环境下配置hive及sqoop

大数据,hive,hadoop,sqoop 额外说明

收录于:152天前

Hive的下载与安装

蜂巢下载地址

在这里插入图片描述
下载完成后需要将文件上传到服务器或虚拟机上,当然如果多wget命令比较熟悉也可以直接下载源码文件。

上传并解压后:

在这里插入图片描述
接下来配置hive的环境变量,全局使用hive:vi /etc/profile

export HADOOP_HOME=/root/hadoop/hadoop-2.10.1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HIVE_HOME=/root/hadoop/hive/apache-hive-2.1.0-bin
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH:$HOME/bin

上面包含了jdk,hadoop的环境变量,详情请看Ubuntu20.04下搭建Hadoop伪分布式集群

hive的核心部分是:

export HIVE_HOME=/root/hadoop/hive/apache-hive-2.1.0-bin
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH:$HOME/bin

进入hive查看环境变量是否配置成功:

在这里插入图片描述

出现了MetaException(message:Hive metastore database is not initialized. Please use schematool 错误,至少说明环境变量配置成功。

这是由于数据库未初始化而生成元数据造成的。需要执行以下指令(在hive的bin目录下执行)

./schematool -initSchema -dbType mysql

不要现在执行,而是配置完mysql数据库后执行,见下文。

Hive的配置

hive-env.sh文件配置

在hive的conf目录找到hive-env.sh.template复制一份改名为hive-env.sh

cp hive-env.sh.template hive-env.sh

配置改名后的文件:
在这里插入图片描述

export HADOOP_HOME=/root/hadoop/hadoop-2.10.1
export HIVE_HOME=/root/hadoop/hive/apache-hive-2.1.0-bin
export HIVE_CONF_DIR=/root/hadoop/hive/apache-hive-2.1.0-bin/conf
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HIVE_AUX_JARS_PATH=/root/hadoop/hive/apache-hive-2.1.0-bin/lib

hive-site.xml文件配置

在conf目录找到hive-default.xml.template 复制一份并改名为hive-site.xml

cp hive-default.xml.template 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://139.9.209.93:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>Xwh190823</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>hdfs://ecs-221826:9010/hive/warehouse</value>
    </property>
    <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/root/hadoop/hive/apache-hive-2.1.0-bin/exec</value>
    </property>
    <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/root/hadoop/hive/apache-hive-2.1.0-bin/downloadedsource</value>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/root/hadoop/hive/apache-hive-2.1.0-bin/logs</value>
</property>

</configuration>

hive-log4j2.properties文件配置

cp hive-log4j2.properties.template hive-log4j2.properties

修改配置到日志目录,如果没有则新建一个:

在这里插入图片描述

将mysql连接的工具包上传到hive的lib目录下:
在这里插入图片描述

在这里插入图片描述

解决hive和hadoop的log4j版本冲突问题,只需删除hive的jar工具包,删除带有impl的即可。

在这里插入图片描述

配置mysql数据库

#进入数据库
mysql -u root -p

# 创建数据库
create database hive;

# 配置权限
grant all on hive.* to root@’master’ identified by ‘hivepwd’; -- 此处的单引号需要修改

# 若上面的失败,就执行下面两行
create user 'root'@'ecs-221826' identified by 'Xwh190823';
grant all on hive.* to 'root'@'139.9.209.93' WITH GRANT OPTION;

# 使配置生效
flush privileges;

退出mysql
exit

上面的grant all on hive.* to root@’master’ identified by ‘hivepwd’是会报错的,因为新版的的mysql版本已经将创建账户和赋予权限的方式分开了解决方案:

使用数据库上的授予权限列表对‘用户名’@‘访问主机’标识的‘密码’时,会出现错误“...near ‘identified by ‘password’ at line 1”

初始化hive的元数据数据库

在第一次使用hive之前,需要使用如下命令初始化hive的元数据库,该命令只能执行一次(在hive的bin目录下)
schematool -dbType mysql -initSchema

在这里插入图片描述

出现下面这个提示需要回到hive-site.xml 配置文件将数据库驱动改为com.mysql.cj.jdbc.Driver,这是数据8版本的驱动。

在这里插入图片描述

这是在此初始化hive数据库会出现org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!的错误。

这时候就需要删除之前磨损的hive数据,重新创建。可以执行成功,如下:

在这里插入图片描述

schematool -dbType mysql -initSchema该命令只能执行一次,多次执行就会包上面的错误,需要删除hive数据库重新配置。

Hive的使用

在hive的配置文件中已经配置了hadoop的节点信息
在这里插入图片描述

使用 hive 命令启动 hive。需要注意的是,Hive启动时会直接访问HDFS。 Hive的一些操作将继续由MapReduce来实现,所以需要保证HDFS和yarn都处于正常启动状态。

# 进入数据库
hive

在这里插入图片描述

# 显示数据库
show databases;

在这里插入图片描述
hive也是基于sql语言作为DDL,DML的数据库。

Hive在使用hadoop时需要用到yarn的一些特性,需要新的配置:

<-- Map Reduce运行需要设置的shuffle服务 -->
    <property>
      <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>

<-- 可以为容器分配的物理内存量(MB)。如果设置为-1且yarn.nodemanager.resource.detect-hardware-capabilities为true,则会自动计算(如果是Windows和Linux)。在其他情况下,默认值为8192MB。 --> 
    <property>
      <name>yarn.nodemanager.resource.memory-mb</name>
      <value>8192</value>
    </property>

再次打开hive数据库,创建包并插入数据:

insert into student(1,'tom');
hive (default)> insert into javaAndBigdata.student(id,name) values (3,"java页大数据");
Query ID = root_20220323224810_5192a9f4-95ae-4166-b21e-c8e5f1493c32
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
2022-03-23 22:48:15,074 INFO  [d31f649c-88de-4e0c-9dbb-f724e403a684 main] client.AHSProxy: Connecting to Application History server at slave2/192.168.52.11:10200
2022-03-23 22:48:15,183 INFO  [d31f649c-88de-4e0c-9dbb-f724e403a684 main] client.AHSProxy: Connecting to Application History server at slave2/192.168.52.11:10200
2022-03-23 22:48:15,252 INFO  [d31f649c-88de-4e0c-9dbb-f724e403a684 main] client.ConfiguredRMFailoverProxyProvider: Failing over to rm2
Starting Job = job_1648046463761_0002, Tracking URL = http://slave1:8088/proxy/application_1648046463761_0002/
Kill Command = /opt/hadoop-3.2.2/bin/mapred job  -kill job_1648046463761_0002
Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0
2022-03-23 22:48:36,569 Stage-1 map = 0%,  reduce = 0%
Ended Job = job_1648046463761_0002 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1:  HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec

https://www.csdn.net/tags/NtDaAg2sMzUyNDgtYmxvZwO0O0OO0O0O.html

插入成功!
在这里插入图片描述

检查短语:

在这里插入图片描述
hive配置成功!

Sqoop的下载与安装

官方下载地址

在这里插入图片描述
在这里插入图片描述

上传到服务器并解压:

在这里插入图片描述

配置环境变量:

在这里插入图片描述
重启环境变量:

source /etc/profile

检查环境变量是否配置成功:

sqoop version

在这里插入图片描述
出现上面的情况可以看到sqoop版本号已经出现了,上面的提示信息是缺少连接数据库的包,接下来导入数据库启动包,和之前的hive导包一样,将数据库启动包导入到sqoop的安装目录的lib目录下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Sqoop的使用

sqoop实现了mysql和hdfs的数据互传。sqoop下载地址

mysql数据导入到hdfs

在Mysql数据库中创建数据库表并插入数据

-- 进入数据库
mysql -u root -p
create database sqoop;

use sqoop;

create table product(
id int not null primary key auto_increment,
name varchar(30),
price double(10,2),
version int
);

insert into product values(null, ‘pro1’, 199, 1);
insert into product values(null, ‘pro2’, 299, 1);
insert into product values(null, ‘pro3’, 399, 1);

在这里插入图片描述
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root --password Xwh190823 --table product -m 1

参数说明
Import 表示导入数据到HDFS
–connect jdbc:mysql://……表示数据库的连接URL
–username root 数据库用户名
–password root 数据库密码
–table product 数据库表名
-m1 指定用于导入数据的map作业个数SSH

除了上面的写法也可以写在一行用空格隔开:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果出现如上图所示的信息,则说明导入成功!

查看导入结果:

hdfs dfs -ls product

在这里插入图片描述
后缀为00000结尾的是数据使用命令cat 查看:

hdfs dfs -cat product/part-m-00000

在这里插入图片描述

hdfs数据导入到mysql

在MySQL数据库中创建表来接收数据(要与hdfs模拟导出的字段保持一致):

use sqoop;

create table product_from_hdfs(
id int not null primary key auto_increment,
name varchar(30),
price double(10,2),
version int
);

在这里插入图片描述

使用sqoop命令将数据从HDFS导出到MySQL:

在这里插入图片描述

最后一行是 -m 1写错了

参数说明
export 表示从HDFS导出数据
–connect jdbc:mysql://……表示数据库的连接URL
–username root 数据库用户名
–password root 数据库密码
–table product_from_hdfs 数据库表名
–export-dir /user/root/……指定导出的文件
–input-fields-terminated-by ‘,’ 指明导出数据的分隔符
-m1 指定用于导出数据的map作业个数SSH
运行成功之后,到MySQL中查询表product_from_hdfs中的数据

sqoop export --connect jdbc:mysql://localhost:3306/sqoop --username root --password Xwh190823 --table product_from_hdfs --export-dir product/part-m-00000 --input-fields-terminated-by ',' -m 1

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当出现上图所示内容时,说明导出成功。

查看建立的数据库是否有数据:
在这里插入图片描述

导出成功!

数据转换

csv数据转换为hive的数据表:
在这里插入图片描述
在这里插入图片描述
数据处理,包括替换分隔符,去除引号等:
在这里插入图片描述

# 对数据文件进行处理
sed -i ‘1d’ /data/201906-citibike-tripdata.csv

# 去掉双引号
sed -i ‘s/”//g’ /data/201906-citibike-tripdata.csv


转换后的数据

在这里插入图片描述

上传到hdfs分布式文件系统上
在这里插入图片描述
启动hive创建于csv表头对应的数据库

在这里插入图片描述

将csv数据导入数据库表

在这里插入图片描述

查询数据是否查看成功
在这里插入图片描述

. . .

相关推荐

额外说明

MFC开发应用框架

本示例使用VS2012软件。 新建MFC应用程序 使用静态库,不会报缺dll问题。 最小化打钩,完成 新建完成如下: 添加3个Button、3个Edit Control 以Boot为例,修改Caption:Boot,修改ID:IDC_BUTTON_Boo

额外说明

(03)Mycat实现读写分离

1、schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/">

额外说明

机械电气自动化常用知识手册

压强单位 物体所受的压力与受力面积之比叫做压强 1 巴(bar)=0.1 兆帕(mpa)==100PA P=F/S PLC 模拟电路 了解电路中关键元器件的作用, 每个元器件出现故障时电路的功能受到什么影响, 电路信号的流向, 相位变化等。 桥式整流电路

额外说明

HNU程序设计-图书馆信息管理系统设计以及实验报告

本题为某大学大一的程序设计大作业,最后的得分为86分/100分。 作者认为可以将它发出来,为有需要的同学,特别是该大学该门科目的后继者提供帮助与解答。 由于作者水平有限,所用思想很朴素,写法很基础,代码很普通。请大佬海涵。 完成者:Eliack & Ar

额外说明

mysql 锁机制与原理详解

前言 不管是数据库,还是很多后端编程语言,都存在锁的机制,锁的存在有效解决了并发情况下对共同资源的抢占,保证了数据的稳定性和一致性,在mysql中,锁是如何工作的呢?其底层的工作原理是怎样的呢?本篇将详细介绍下mysql锁的机制。 mysql锁介绍 在数

额外说明

Java操作hdfs文件系统

前言 在上一篇,我们通过命令行的使用掌握了如何基于hdfs的命令对hdfs文件系统的常用操作,本篇将分享如何基于JavaAPI 操作hdfs文件系统 前置准备 默认服务器上的hadoop服务已经启动 本地如果是windows环境,需要本地配置下hadoo

额外说明

后端面试话术集锦第 九 篇:Activiti工作流面试话术

这是后端面试集锦第九篇博文——Activiti工作流面试话术❗❗❗ 1. 工作流话术 工作流这块儿,实际在工作中使用的时候,Activiti用的居多,当然还有一些其他的工作流引擎。 在网上看了也大概看了一下,其他的像JBPM以及workflow等用的情况

额外说明

mysql创建自定义函数报错

mysql创建自定义函数报错:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declarat… 这是我们开启了bin-log,我们就必须指定我们的函数是

额外说明

简单实现ant design pro react typescript(ts) spring boot mybatis mysql前后端登录接口 解决ant design pro登录成功无法跳转的问题

文章目录 技术栈 编辑器 数据库 切换数据库 创建数据表 初始化数据 后端代码 实现UserEntity代码 实现UserMapper代码 创建userMapper.xml文件 实现UserVo代码 实现UserService代码 实现UserLogin

额外说明

mysql-->查询近30天的数据

取近30天数据的实操题目-->牛客网 涉及/可用函数:DATEDIFF()、TIMESTAMPDIFF()、DATE_SUB(date, INTERVAL expr type) 延伸: 一、时间加减函数DATE_ADD和DATE_SUB date:日期表

ads via 小工具