首页 > 系统相关 >【Windows】Windows10系统下Hadoop和Hive环境搭建

【Windows】Windows10系统下Hadoop和Hive环境搭建

时间:2023-08-08 18:00:49浏览次数:35  
标签:bin Windows Windows10 hive hadoop Hive HOME 目录

环境准备

软件 版本 备注
Windows 10 操作系统
JDK 8 暂时不要选用大于等于JDK9的版本,因为启动虚拟机会发生未知异常
MySQL 8.x 用于管理Hive的元数据
Apache Hadoop 3.3.1 -
Apache Hive 3.1.2 -
Apache Hive src 1.2.2 因为只有1.x版本的Hive源码提供了.bat启动脚本,有能力可以自己写脚本就不用下此源码包
winutils hadoop-3.2.1 Hadoop的Windows系统下的启动依赖

hadoop的官网下载和各版本下载方法

一般来说,Apache的开源软件后缀都是apache.org,Hadoop官网:https://hadoop.apache.org/

官网下载:官网下载

旧版本下载(官方的archive地址):旧版本下载

清华大学开源软件镜像站下载(速度较快,只有新版本):清华大学开源软件镜像站

Apache Hadoop 3.3.1:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

Apache Hive下载

官网下载:http://archive.apache.org/dist/hive/

Apache Hive 3.1.2:http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

Apache Hive 1.2.2 src:http://archive.apache.org/dist/hive/hive-1.2.2/apache-hive-1.2.2-src.tar.gz

winutils

下载地址(找到winutils对应hadoop的版本号):https://link.zhihu.com/?target=https%3A//github.com/Zer0r3/winutils

解压winutils,把winutils\bin目录下的内容拷贝至hadoop的bin目录。

下载完这一些列软件之后,MySQL正常安装为系统服务随系统自启。解压hadoop-3.3.1.tar.gz、apache-hive-3.1.2-bin.tar.gz、apache-hive-1.2.2-src.tar.gz和winutils到指定目录:

接着把源码包apache-hive-1.2.2-src的bin目录下的文件拷贝到apache-hive-3.1.2-bin的bin目录中(若文件相同则覆盖,一定要覆盖,否则后续使用hive命令可能会有问题)。

把winutils中目录下的hadoop.dll和winutils.exe文件拷贝到Hadoop的解压目录的bin文件夹下。

最后再配置一下JAVA_HOME和HADOOP_HOME两个环境变量,并且在Path中添加%JAVA_HOME%\bin;和%HADOOP_HOME%\bin。

接着用命令行测试一下,如果上述步骤没问题,控制台输出如下:

配置和启动Hadoop

在HADOOP_HOME的etc\hadoop子目录下,找到并且修改下面的几个配置文件:

core-site.xml(这里的tmp目录一定要配置一个非虚拟目录,别用默认的tmp目录,否则后面会遇到权限分配失败的问题)

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>  
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/D:/softinstall/bigdata/hadoop-3.3.1/data/tmp</value>
    </property>  
</configuration>

hdfs-site.xml(这里要预先创建nameNode和dataNode的数据存放目录,注意一下每个目录要以/开头,我这里预先在HADOOP_HOME/data创建了nameNode和dataNode子目录)

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.http.address</name>
        <value>0.0.0.0:50070</value>
    </property>
    <property>    
        <name>dfs.namenode.name.dir</name>    
        <value>/D:/softinstall/bigdata/hadoop-3.3.1/data/nameNode</value>    
    </property>    
    <property>    
        <name>dfs.datanode.data.dir</name>    
        <value>/D:/softinstall/bigdata/hadoop-3.3.1/data/dataNode</value>  
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

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>

至此,最小化配置基本完成。接着需要格式化namenode并且启动Hadoop服务。切换至$HADOOP_HOME/bin目录下,使用CMD输入命令hdfs namenode -format(格式化namenode切记不要重复执行):

格式化namenode完毕后,切换至$HADOOP_HOME/sbin目录下,执行start-all.cmd脚本:

这里命令行会提示start-all.cmd脚本已经过期,建议使用start-dfs.cmd和start-yarn.cmd替代。同理,如果执行stop-all.cmd也会有类似的提示,可以使用stop-dfs.cmd和stop-yarn.cmd替代。start-all.cmd成功执行后,会拉起四个JVM实例(自动新建了四个Tab),此时可以通过jps查看当前的JVM实例:

可见已经启动了ResourceManager、NodeManager、NameNode和DataNode四个应用,至此Hadoop的单机版已经启动成功。通过stop-all.cmd命令退出这四个进程。可以通过http://localhost:8088/查看调度任务的状态:

通过http://localhost:50070/去查看HDFS的状态和文件:

重启Hadoop的办法:先执行stop-all.cmd脚本,再执行start-all.cmd脚本。

hadoop常用命令

#1、查看目录下的文件列表:hadoop fs –ls [文件目录]
hadoop fs -ls -h /lance

#2、将本机文件夹存储至hadoop上:hadoop fs –put [本机目录] [hadoop目录]
hadoop fs -put lance /

#3、在hadoop指定目录内创建新目录:hadoop fs –mkdir [目录]
hadoop fs -mkdir /lance

#4、在hadoop指定目录下新建一个文件,使用touchz命令:
hadoop fs -touchz /lance/tmp.txt

#5、将本机文件存储至hadoop上:hadoop fs –put [本机地址] [hadoop目录]
hadoop fs -put tmp.txt /lance #直接目录
hadoop fs -put tmp.txt hdfs://www.lance.com/lance #远程服务器地址

#6、打开已存在文件:hadoop fs –cat [文件名称]
hadoop fs -cat /lance/tmp.txt

#7、重命名hadoop fs –mv [旧文件名] [新文件名]
hadoop fs -mv /tmp /tmp_bak #修改文件夹名

#8、将hadoop上文件down至本机已有目录下:hadoop fs -get [文件目录] [本机目录]
hadoop fs -get /lance/tmp.txt /lance

#9、删除hadoop上文件:hadoop fs -rm [文件地址]
hadoop fs -rm /lance/tmp.txt

#10、删除hadoop上指定文件夹(包含子目录等):hadoop fs –rm -r [目录地址]
hadoop fs -rmr /lance

#11、将hadoop指定目录下所有内容保存为一个文件,同时下载至本机
hadoop dfs –getmerge /user /home/t

#12、将正在运行的hadoop作业kill掉
hadoop job –kill [jobId]

配置和启动Hive

Hive是构筑于HDFS上的,所以务必确保Hadoop已经启动。Hive在HDFS中默认的文件路径前缀是/user/hive/warehouse,因此可以先通过命令行(进入hadoop的bin目录)在HDFS中创建此文件夹:

hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/warehouse

同时需要通过下面的命令创建并为tmp目录赋予权限:

hdfs dfs -mkdir /tmp
hdfs dfs -chmod -R 777 /tmp

在系统变量中添加HIVE_HOME,具体的值配置为D:\softinstall\bigdata\apache-hive-3.1.2-bin,同时在Path变量添加%HIVE_HOME%\bin;,跟之前配置HADOOP_HOME差不多。下载和拷贝一个mysql-connector-java-8.0.x.jar 或 postgresql-42.3.3.jar到$HIVE_HOME/lib目录下:

创建Hive的配置文件,在$HIVE_HOME/conf目录下已经有对应的配置文件模板,需要拷贝和重命名,具体如下:

  • $HIVE_HOME/conf/hive-default.xml.template => $HIVE_HOME/conf/hive-site.xml
  • $HIVE_HOME/conf/hive-env.sh.template => $HIVE_HOME/conf/hive-env.sh
  • $HIVE_HOME/conf/hive-exec-log4j.properties.template => $HIVE_HOME/conf/hive-exec-log4j.properties
  • $HIVE_HOME/conf/hive-log4j.properties.template => $HIVE_HOME/conf/hive-log4j.properties

修改hive-env.sh脚本,在尾部添加下面内容:

export HADOOP_HOME=D:\softinstall\bigdata\hadoop-3.3.1
export HIVE_CONF_DIR=D:\softinstall\bigdata\apache-hive-3.1.2-bin\conf
export HIVE_AUX_JARS_PATH=D:\softinstall\bigdata\apache-hive-3.1.2-bin\lib

修改hive-site.xml文件,主要修改下面的属性项:

属性名 属性值 备注
hive.metastore.warehouse.dir /user/hive/warehouse Hive的数据存储目录,这个是默认值
hive.exec.scratchdir /tmp/hive Hive的临时数据目录,这个是默认值
javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8&amp;serverTimezone=UTC Hive元数据存放的数据库连接
javax.jdo.option.ConnectionDriverName com.mysql.cj.jdbc.Driver Hive元数据存放的数据库驱动
javax.jdo.option.ConnectionUserName root Hive元数据存放的数据库用户
javax.jdo.option.ConnectionPassword root Hive元数据存放的数据库密码
hive.metastore.db.type mysql Hive元数据存放的数据库类型
hive.exec.local.scratchdir D:\softinstall\bigdata\apache-hive-3.1.2-bin\data\scratchDir 创建本地目录$HIVE_HOME/data/scratchDir
hive.downloaded.resources.dir D:\softinstall\bigdata\apache-hive-3.1.2-bin\data\resourcesDir 创建本地目录$HIVE_HOME/data/resourcesDir
hive.querylog.location D:\softinstall\bigdata\apache-hive-3.1.2-bin\data\querylogDir 创建本地目录$HIVE_HOME/data/querylogDir
hive.server2.logging.operation.log.location D:\softinstall\bigdata\apache-hive-3.1.2-bin\data\operationDir 创建本地目录$HIVE_HOME/data/operationDir
hive.metastore.schema.verification false 可选
hive.server2.enable.doAs false 不加会遇到『user root cannot impersonate anonymous』,则要等待重连

特别注意:hive-site.xml是从hive-default.xml.template直接复制过来,原来的文件里面有一些配置默认是derby的,所以修改成mysql的时候,要特别注意。

修改完毕之后,在本地的MySQL服务新建一个数据库hive,编码和字符集可以选用范围比较大的utf8mb4(虽然官方建议是latin1,但是字符集往大范围选没有影响):

上面的准备工作做完之后,可以进行Hive的元数据库初始化,在$HIVE_HOME/bin目录下执行下面的脚本:

hive.cmd --service schematool -dbType mysql -initSchema --verbose

这里有个小坑,hive-site.xml文件的第3215行有个神奇的无法识别的符号:

此无法识别符号会导致Hive的命令执行异常,需要去掉。当控制台输出Initialization script completed schemaTool completed的时候,说明元数据库已经初始化完毕:

在$HIVE_HOME/bin目录下,通过hive.cmd可以连接Hive(关闭控制台即可退出):

hive.cmd

尝试创建一个表t_test:

create table t_test(id INT,name string);
show tables;

查看http://localhost:50070/确认t_test表已经创建成功。

尝试执行一个写入语句和查询语句:

insert into t_test(id,name) values(1,'throwx');
select * from t_test;

 

使用DBeaver连接Hive

HiveServer2是Hive服务端接口模块,必须启动此模块,远程客户端才能对Hive进行数据写入和查询。目前,此模块还是基于Thrift RPC实现,它是HiveServer的改进版,支持多客户端接入和身份验证等功能。配置文件hive-site.xml中可以修改下面几个关于HiveServer2的常用属性:

属性名 属性值 备注
hive.server2.thrift.min.worker.threads 5 最小工作线程数,默认值为5
hive.server2.thrift.max.worker.threads 500 最大工作线程数,默认值为500
hive.server2.thrift.port 10000 侦听的TCP端口号,默认值为10000
hive.server2.thrift.bind.host 127.0.0.1 绑定的主机,默认值为127.0.0.1
hive.execution.engine mr 执行引擎,默认值为mr

在$HIVE_HOME/bin目录下执行下面的命令可以启动HiveServer2:

hive.cmd --service hiveserver2

hiveserver2启动完毕后,通过DBeaver创建连接: 

 

可能遇到的问题

下面小结一下可能遇到的问题。

hadoop查看版本失败

 

标签:bin,Windows,Windows10,hive,hadoop,Hive,HOME,目录
From: https://www.cnblogs.com/xfeiyun/p/16740262.html

相关文章

  • 在windows上使用_netrc文件让Git记住用户名和密码(Linux文件名为.netrc)
    windowsnetrc文件是什么。根据我搜索到的结果,windowsnetrc文件是一种用于保存网络身份验证信息的文件,例如用户名和密码。它可以被一些命令行工具和应用程序使用,比如Git、curl、ftp等。windowsnetrc文件的格式如下:machine<hostname>login<username>password<password>......
  • windows api录音pcm
    pcm.h#pragmaonce#include<cstdio>#include<cstdint>#include<Windows.h>#pragmacomment(lib,"winmm.lib")classpcm{public: pcm(); ~pcm(); voidstartRecording(); voidendRecording();private: structWavPCMFileHead......
  • 【GTK】在Windows下安装GTK
    1、下载MSYS2从MSYS2中下载安装包,并暗转MSYS2。2、打开MSYS2shell在MSYS2shell中运行以下命令:>pacman-Smingw-w64-x86_64-gtk4成功截图:......
  • windows下常用的nginx命令
    startnginx:启动nginxnginx.exe-cconf/nginx.conf按照指定配置去启动nginxnginx-t-cconf/nginx.conf :检测nginx是否配置正确nginx-sreload :修改配置后重新加载生效nginx-sstop :快速停止nginx,可能并不保存相关信息.nginx-s quit :完整有序的停止ngi......
  • windows10使用Powershell脚本自动初始化磁盘
    如下为脚本内容:1首先使用get-disk命令检测未被初始化的磁盘,磁盘为被初始化属性会为raw,使用rawdisk变量获取未被初始化的磁盘。2判断rawdisk是否有值,如果有,则存在未被初始化磁盘,条件为真,进行下一步。如果空值,则说明系统没有未被初始化的磁盘,输出:没有找到未格式化的磁盘或RAW参数......
  • hadoop组件---数据仓库(五)---通过JDBC连接hive的thrift或者hiveserver2
    我们在上一篇文章中已经学习了Hive的常用命令,但是如果使用其他的语言如何跟Hive进行交互呢。Thrift简介Hive拥有HiveServer(Thrift)或者Hiveserver2组件,提供了JDBC驱动服务,使得我们可以用Java代码或者Python来连接Hive并进行一些关系型数据库的sql语句查询等操作。HiveServer或者Hi......
  • hadoop组件---数据仓库(二)---hive的数据模型和数据类型
    我们在上一章中已经大概了解了Hive有四种数据模型,本章就来详细了解它们的使用。Hadoop组件—数据仓库(一)—Hive简介数据模型Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive......
  • hadoop案例(一)--hive--2T数据动态创建分区
    我们在使用hadoop集群过程中,发现网上很少有具体的数据使用分析案例,也就是说我们不知道多少个节点处理多少大小的数据量耗费多少时间是合理的哪些是需要优化的。为了增加这方面的相关经验,我们会记录一下实际的使用案例。以供大家参考。配置如图:耗费时间如图:执行语句sethive.exe......
  • 数据仓库(十一)---hive使用小技巧积累(持续更新)
    我们在本章节会持续更新关于hive使用过程中的一些实用的小技巧HIVE查询显示列名及行转列显示hiveshell;sethive.cli.print.header=true;//打印列名sethive.cli.print.row.to.vertical=true;//开启行转列功能,前提必须开启打印列名功能sethive.cli.print.row.to.ve......
  • 虚拟机 的net模式与 桥接模式, windows可以ping通 虚拟机,但是虚拟机无法ping通 windows
    1第一个问题,net与桥接的模式。    2第二个问题,虚拟机ping不通PC,但是PC可以ping通虚拟机。  ......