怎么查公司网站有没有被收录,上线了建站价格,手机软件开发公司简介,一般通过人体的电流超过多大一、基本调用 Configuration 配置对象类#xff0c;用于加载或设置参数属性 FileSystem 文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。 1. maven依赖pom.xml文件 dependencygroupIdorg.apache.hadoop/groupId用于加载或设置参数属性 FileSystem 文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。 1. maven依赖pom.xml文件 dependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-common/artifactIdversion3.1.4/version/dependencydependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-hdfs/artifactIdversion3.1.4/version/dependencydependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-client/artifactIdversion3.1.4/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13/version/dependency
2. 创建跟hdfs文件系统的连接和关闭
package com.yifeng.hadoop;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.After;
import org.junit.Before;import java.io.IOException;/*** Author: EstellaQ* Date: 2025/2/21 18:00* Description: 测试类**/
public class HDFSClientTest {private static Configuration conf null;private static FileSystem fs null;/*** 初始化方法用于和hdfs集群建立连接* throws IOException*/Beforepublic void connect2HDFS() throws IOException {// 创建配置对象实例conf new Configuration();//设置操作的文件系统是HDFS,并且指定HDFS操作地址conf.set(fs.defaultFS, hdfs://node1.yifeng.cn:8020);// 创建FileSystem对象实例fs FileSystem.get(conf);}/*** 关闭客户端和hdfs连接* throws IOException */Afterpublic void close() {// 首先判断文件系统实例是否为null如果不为null进行关闭if (fs ! null) {try {fs.close();} catch (IOException e) {e.printStackTrace();}}}
}3. 权限验证
直接调用api呢会报错Permission denied: userhp, accessWRITE, inode/user:root:supergroup:drwxr-xr-x 原因以Windows登录用户访问HDFS,而该用户不具备在HDFS操作权限
解决
1、修改HDFS文件系统权限
2、或者设置客户端身份该身份具备在HDFS操作权限
//设置客户端身份以具备权限在hdfs上进行操作
System.setProperty(HADOOP_USER_NAME, root);
4. 创建文件夹
/*** 创建文件夹操作*/Testpublic void mkdir() throws IOException {// 判断文件夹是否存在如果不存在再创建if (!fs.exists(new Path(/yifeng))) {//创建文件夹fs.mkdirs(new Path(/yifeng));}}
5. 上传文件
/*** 从本地文件系统上传文件到HDFS* Q:本地文件系统指的是 客户端所在集群的文件系统 此处指的是Windows文件系统*/Testpublic void putFile2HDFS() throws IOException {//本地文件路径Path src new Path(E:\\appdata\\hdfs\\helloworld.txt);//hdfs目标路径Path dst new Path(/yifeng);//上传文件 参数源路径目标路径fs.copyFromLocalFile(src,dst);}
6. 下载文件
/*** 从HDFS下载文件到本地文件系统*/Testpublic void getFile2Local() throws IOException {//本地文件路径Path src new Path(/yifeng/helloworld.txt);//hdfs目标路径Path dst new Path(E:\\appdata\\helloworld.txt);//上传文件 参数源路径目标路径fs.copyToLocalFile(src,dst);} 此时会报错 原因
Hadoop访问windows本地文件系统要求Windows上的本地库能正常工作。其中Hadoop使用某些Windows API来实现类似posix的文件访问权限。 上述功能需要在hadoop.dll和winutils.exe来实现。
解决
下载Hadoop源码在windows平台编译编译出windows本地库。然后配置Hadoop环境变量。配置好之后重启IDEA有些机器需要右键管理员权限运行IDEA。 HADOOP_HOMEE:\tools\hadoop\hadoop-3.1.4 path;%HADOOP_HOME%\bin 二、Log4j使用
1. 介绍 Log4J 是 Apache 的一个开源项目。通过在项目中使用 Log4J我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式通过定义日志的输出级别可以更灵活的控制日志的输出过程。方便项目的调试。
官网 https://logging.apache.org/log4j/2.x/
2. 三大组件
Log4J主要由Logger(日志记录器)、Appender输出端和 Layout日志格式化器组成。Logger控制日志的输出级别与日志是否输出Appender指定日志的输出方式ConsoleAppender控制台、FileAppender文件、JDBCAppender等Layout控制日志信息的输出格式simple格式、HTML格式、PatternLayout自定义格式。
3. 日志的级别
Log4J 在 org.apache.log4j.Level 类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL八种日志级别。一般只使用4个级别优先级从高到低为 ERROR WARN INFO DEBUG。
4. 项目中应用
1项目中引入log4j的jar包
hadoop中已经集成好log4j的jar包了。
2添加配置文件log4j.properties
只需要在项目路径下新建log4j.properties配置文件并配置日志的输出格式等信息Log4J框架会自动的加载配置文件并将配置信息设置到Logger中。
# 控制台输出配置
log4j.appender.Consoleorg.apache.log4j.ConsoleAppender
log4j.appender.Console.layoutorg.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern%d [%t] %p [%c] - %m%n
#指定日志的输出级别与输出端
log4j.rootLoggerDEBUG,Console#日志输出格式
%p: 输出日志信息优先级即DEBUGINFOWARNERRORFATAL,
%d: 输出日志时间点的日期或时间默认格式为ISO8601也可以在其后指定格式比如%d{yyyy-MM-dd HH:mm:ss,SSS}输出类似2011-10-18 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程以及在代码中的行数。
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个%字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符Windows平台为\r\nUnix平台为\n输出日志信息换行
3代码中使用
public class Log4Test {public static void main(String[] args) {Logger logger Logger.getLogger(Log4Test.class);logger.debug(这是debug);logger.info(这是info);logger.warn(这是warn);logger.error(这是error);logger.fatal(这是fatal);}
}三、Google Option使用
1. 介绍
Google-option是Bazel Project中的命令行参数解析器。option程序包已拆分为一个单独的jar可用于通用程序。GitHubhttps://github.com/pcj/google-options
2. 引入Google-option的jar包 dependency groupIdcom.github.pcj/groupId artifactIdgoogle-options/artifactId version1.0.0/version /dependency 3. 首先创建参数实体类 类应提供与预期的命令行选项相对应的public字段 每个public字段都应使用Option注释进行注释 。Option注解参数说明 name:选项名称 defaultValue:默认值 abbrev:选项的单字符缩写 help:使用信息的帮助字符串 category:描述此选项所属的类别 allowMultiple:一个标志指示是否应允许选项类型在单个选项列表中多次出现。 import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;import java.util.List;public class ServerOptions extends OptionsBase {Option(name help,abbrev h,help Prints usage info.,defaultValue true)public boolean help;Option(name host,abbrev o,help The server host.,category startup,defaultValue )public String host;Option(name port,abbrev p,help The server port.,category startup,defaultValue 8080)public int port;Option(name dir,abbrev d,help Name of directory to serve static files.,category startup,allowMultiple true,defaultValue )public ListString dirs;}
4. 在main方法中解析参数
import com.google.devtools.common.options.OptionsParser;import java.util.Collections;public class Server {public static void main(String[] args) {//创建一个参数Parser解析对象 解析规则为ServerOptions中定义OptionsParser parser OptionsParser.newOptionsParser(ServerOptions.class);//解析输入参数数组argsparser.parseAndExitUponError(args);//获得OptionServerOptions options parser.getOptions(ServerOptions.class);//如果输入参数host为空 或 port0非法或 dirs目录为空if (options.host.isEmpty() || options.port 0 || options.dirs.isEmpty()) {//输出Usage使用方法printUsage(parser);return;}//输出Server运行的host portSystem.out.format(Starting server at %s:%d...\n, options.host, options.port);//输出每个dir的名字for (String dirname : options.dirs) {System.out.format(\\-- Serving static files at %s\n, dirname);}}private static void printUsage(OptionsParser parser) {System.out.println(Usage: java -jar server.jar OPTIONS);System.out.println(parser.describeOptions(Collections.String, StringemptyMap(),OptionsParser.HelpVerbosity.LONG));}
}
四、舆情数据上报案例
在HDFS上有一个目录相当于企业中的数据中转站会有源源不断的数据存储进去其中有些类型的数据是我们业务相关的舆情数据要求使用程序能够遍历数据源目录找出符合需求的数据上传移动到指定的HDFS目录下。
Step1实现思路
使用Google Option解析命令行参数。读取要采集的数据目录生成上传任务上传任务包含一个任务文件该文件包含了要上传哪些文件到HDFS上。执行任务读取要上传的任务文件挨个将任务文件中的文件上传到HDFS。上传中、上传完毕需要给任务文件添加特别的标识willdoing copy done。
Step2工程环境搭建
添加maven依赖 构建代码包结构 arg: 处理命令行参数 dfs: 存放操作HDFS的工具类 task: 处理文件上传任务
Step3开发舆情上报程序参数解析
同上在main方法中解析参数
创建一个SentimentOptions类 并从OptionsBase继承定义以下几个参数
(1) 帮助可以显示命令的帮助信息 help h 默认参数
(2) 要采集数据的位置 source s
(3) 生成待上传的临时目录 pending_dir p
(4) 生成要上传到的HDFS路径 output o
Step4实现生成数据采集任务
task包下创建TaskMgr源文件。 先实现生成数据上报任务。
实现步骤
1.判断原始数据目录是否存在
2.读取原始数据目录下的所有文件
3.判断待上传目录是否存在不存在则创建一个
4.创建任务目录目录名称task_年月日时分秒_任务状态
5.遍历待上传的文件在待上传目录生成一个willDoing文件
6.将待移动的文件添加到willDoing文件中
Step5实现执行数据上报任务
1. 读取待上传目录的willDoing任务文件注意过滤COPY和DONE后的任务文件夹
2.遍历读取任务文件开始上传 a)将任务文件修改为_COPY表示正在处理中 b)获取任务的日期 c)判断HDFS目标上传目录是否存在不存在则创建 d)读取任务文件 e)按照换行符切分 f)上传每一个文件,调用HDFSUtils进行数据文件上传 g)上传成功后将_COPY后缀修改为_DONE
Step6项目打包
shade插件可以将所有的jar打到一个jar包中。
将执行主类的项目路径复制到mainClass/mainClass中 然后打包 这里打包好两个jar包一个是原代码的jar包下面那个是携带了依赖的jar包 Step7结果测试
创建一个目录/root/sentiment_upload使用以下shell脚本来驱动jar包执行。 #!/bin/bash export SENTIMENT_HOME/root/sentiment_upload export JAVA_HOME/export/server/jdk1.8.0_65 export JAVA_CMD${JAVA_HOME}/bin/java export JAVA_OPS-jar ${SENTIMENT_HOME}/hdfs-api-1.0-SNAPSHOT-jar-with-dependencies.jar SOURCE_DIR$1 PENDING_DIR$2 OUTPUT_DIR$3 if [ ! $SOURCE_DIR ] || [ ! $OUTPUT_DIR ]; then ${JAVA_CMD} ${JAVA_OPS} -h exit; fi if [ ! $PENDING_DIR ] ; then ${JAVA_CMD} ${JAVA_OPS} -s $SOURCE_DIR -o $OUTPUT_DIR exit; fi ${JAVA_CMD} ${JAVA_OPS} -s $SOURCE_DIR -p ${PENDING_DIR} -o $OUTPUT_DIR 将脚本和jar包都上传到服务器 /root/sentiment_upload 目录下 创建文件夹 source pending output mkdir source mkdir pending mkdir output 将数据集上传到source目录下数据集在代码里边也有
执行以下命令即可 sh sentiment_upload.sh /root/sentiment_upload/source /root/sentiment_upload/pending /root/sentiment_upload/out 项目地址https://gitee.com/EstellaQ/hdfs-api.git