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

hadoop环境下配置hive及sqoop

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

收录于:18天前

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数据导入数据库表

在这里插入图片描述

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

. . .

相关推荐

额外说明

Java实现ssh连接服务器

目录 一、引入依赖 二、工具类 (1)SSHExecutor类 (2)SSHUtil类 三、使用方法 一、引入依赖 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifact

额外说明

语法-Java简介-04 Collection类

Set JAVA38 字符串去重 描述 从键盘获取一串字符串,要求去除重复的字符。请使用HashSet解决这一问题 输入描述: 键盘输入的任意字符串 输出描述: 去重后的字符串(不要求顺序,预设代码中已经给出输出) 示例1 输入: hellowor

额外说明

获取某个年份区间中的一个随机时间

/** * 获取某个年份区间中的一个随机时间 * * @param startYear * @param endYear * @return * @throws ParseException

额外说明

攻防世界:view_source

根据题目提示,要查看页面源代码,右键单击没有用,上网查询查看源代码的快捷键,就是ctrl+u,然后flag就在这一页。  

额外说明

lotus 基本开发功能总结(三)

///怎样使用公式取得视图中符合条件的列 server:=@Subset(@DbName,1) database:=@Subset(@DbName,-1) @DbColumn( class : cache ; server : database ; vi

额外说明

Spring之微服务架构与Spring Cloud

微服务架构与Spring Cloud 微服务架构与Spring Cloud 摘要 引言 词汇解释 详细介绍 微服务架构 Spring Cloud核心组件 示例代码: 注释: 注意事项 理解微服务架构的优势 详细介绍 什么是微服务架构? 微服务架构的优势

额外说明

爬虫实战之抓取猫眼电影排行TOP100(使用正则表达式提取数据)

1.目标:猫眼电影TOP100的电影名称,时间,评分,图片等信息。提取的站点URL为https://maoyan.com/board/4?offset=0,提取的结果会以文件形式保存下来。 2.代码编写: import requests from req

额外说明

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」

文章目录 前言 1. 本地搭建FastDFS文件系统 1.1 环境安装 1.2 安装libfastcommon 1.3 安装FastDFS 1.4 配置Tracker 1.5 配置Storage 1.6 测试上传下载 1.7 与Nginx整合 1.8 安

额外说明

死锁(Dead Lock)详解

1.什么是死锁 死锁是多线程或多进程并发编程中的一种常见问题,它发生在两个或多个线程(或进程)相互等待对方释放资源的情况下,导致它们都无法继续执行下去的状态。这种情况下,每个线程都在等待某个资源,而同时也拥有一些资源,这使得它们之间产生了僵局,无法继续执

额外说明

分布式事务

https://blog.csdn.net/u010425776/article/details/79516298

ads via 小工具