Hadoop Pig源码分析(一) Pig加载配置的四种方式

2019-03-28 13:32|来源: 网络

由于要在开发机器上源码调试Pig,同时也要在单机上通过PIG_HOME/bin/下的pig脚本去执行Pig,以及在内网集群,生产环境上运行Pig...所以不同的配置环境会导致一些问题,比如Lzo压缩.有时明显你机器上安装了lzo,你CLASS_PATH中也加载Hadoop这些配置,但还是不行.所以花了点时间,看了下Pig这方面的源码,终于搞明白.这里分享下.

pig中最终的配置都由java.util.Properties管理。通过以下四种方式来加载Pig运行所需要的配置。

1)从System.getProperty("user.home") + "/.pigrc"获取

2)从CLASS_PATH中读取/pig-default.properties和/pig.properties

实际上是获取的org.apache.pig.impl.util.PropertiesUtil.class.getResource("").getPath()

其中/pig.properties会覆盖/pig-default.properties中的配置

3)读取系统属性

System.getProperties()

4)读取Hadoop/conf中的配置

以上4会覆盖3,3会覆盖2,2会覆盖1的属性,权重逐级递增.其实这也类似于一个操作系统,用户变量会覆盖系统变量,要运行的某个程序变量又会覆盖用户变量.

知道这些后,我会在我的开发机器上的$HOME/.pigrc下配置,配置成功后在日志中会有这样的提示:

2012-03-06 14:56:55,859 WARN  util.PropertiesUtil (PropertiesUtil.java:loadPropertiesFromFile(81)) -

/home/guoyun/.pigrc exists but will be deprecated soon. Use conf/pig.properties instead!

集群环境下就在Hadoop/conf下部署,当然也可以在pig.properties.

相信配置是每个程序基本要有的东西,Pig这4种加载方式,并且都有自己的优先级,值得借鉴!

相关问答

更多
  • 你的猜测有些准确。 通过Hadoop,我想你是指MapReduce? Hadoop本身就是一个由许多组件组成的生态系统(包括MapReduce,HDFS,Pig和Hive)。 当您需要编写用于在Map()和Reduce()方法级别处理数据的逻辑时,MapReduce很好。 在我的工作中,当我处理非结构化和需要清理的数据时,我发现MapReduce非常有用。 Hive,Pig:它们适用于批处理,定期运行(可能需要数小时或数天) HBase&Cassandra:支持低延迟呼叫。 所以它们可以用于响应时间很关键的 ...
  • 所以......我尝试使用mapreduce选项运行Pig脚本: pig -x mapreduce script.pig 它仍然失败,但它至少产生了一个有意义的错误。 我似乎不得不从CSV文件中删除标题,因为Pig使用标题行作为数据。 这似乎只有在使用浮点数时才会发生 - 如果使用带整数的相同脚本,则只会忽略标题行。 就是这样。 首先从文件中删除标题,而不是对它运行脚本 - 它工作。 So ... I tried running Pig script with mapreduce option: pig ...
  • 是。 安装猪,然后在本地运行。 它可以在本地做任何事情(尽管在大多数情况下更慢),它可以做到超过hadoop。 对于交互式shell(grunt): pig -x local 要在本地运行pig脚本: pig -x local some_script.pig 有关如何使用猪的最佳文档已经在Apache上完成 ,他们也有一个非常好的教程 。 Yes. Install pig and then run it locally. It can do everything locally (albeit in m ...
  • MapReduce只是一个计算框架 。 HBase与此无关。 也就是说,您可以通过编写MapReduce作业来有效地将数据提取到/从HBase中获取。 或者,您可以使用其他HBase API(如Java)编写顺序程序来放置或获取数据。 但是我们使用Hadoop,HBase等来处理大量的数据,所以没有什么意义。 当您的数据太大时,使用正常的顺序程序将非常低效。 回到你问题的第一部分,Hadoop基本上是两件事:一个分布式文件系统(HDFS) +一个计算或处理框架(MapReduce) 。 像所有其他FS一样, ...
  • 您的文件已复制到HDFS,文件名为: /home/hduser 。 您列出的ls输出显示文件大小约为10MB。 现在我假设你要找的是文件存在于文件夹/home/hduser 。 我还猜测在运行-copyFromLocal命令之前该文件夹不存在 - 在这种情况下,hadoop将复制到指定的文件。 如果指定的文件是目录,则hadoop将复制到该目录中的文件(该文件与本地副本具有相同的名称)。 因此,要解决此问题,您需要在执行-copyFromLocal fs命令之前确保该文件夹存在: # Delete the ...
  • 当我意识到我的硬盘已经满90%时,我解除了这种情况。 在这个级别,hadoop拒绝再写日志。 我只需删除一些(大!)文件,让它再次运行... I unblocked the situation while getting aware that my hard drive was 90% full. At this level, hadoop refuses to write anymore logs. I just had to delete some (big !) files to get it run ...
  • 要启动它,请转到hadoop的sbin目录,然后键入命令 mr-jobhistory-server.sh start historyserver --config $HADOOP_CONF_DIR $HADOOP_CONF_DIR是hadoop的配置文件(如hdfs-site.xml等)驻留的目录。 To start it,go to hadoop's sbin dir and then type the command mr-jobhistory-server.sh start historyserve ...
  • 在测试时,Hadoop只是可选的。 为了做任何规模的任何事情你也需要hadoop。 没有hadoop运行意味着你在本地模式下运行猪。 这基本上意味着所有数据都由您运行的同一个进程处理。这适用于单个节点和示例数据。 当运行任何大量数据或多台机器时,您希望以hadoop模式运行pig。 通过在cassandra节点上运行hadoop任务跟踪器,pig可以利用map reduce减少提供的优势,分配工作负载并使用数据局部性来减少网络传输。 Hadoop is only optional when you are ...
  • 猪可以以两种模式运行: 本地模式。 在这种模式下,根本不使用Hadoop集群。 所有进程都在单个JVM中运行,文件从本地文件系统中读取。 要以本地模式运行Pig,请使用以下命令: pig -x local MapReduce模式。 在此模式下,Pig将脚本转换为MapReduce作业并在Hadoop集群上运行它们。 这是默认模式。 群集可以是本地的或远程的。 Pig使用HADOOP_MAPRED_HOME环境变量在本地计算机上查找Hadoop安装(请参阅安装Pig )。 如果要连接到远程集群,则应在pi ...
  • MapReduce的作用可以称为“执行引擎”。 Pig作为一个系统正在将Pig Latin命令转换为一个或多个MR Jobs。 Pig本身没有能力运行它 - 它将这项工作委托给Hadoop。 我会在编译器和操作系统之间建立类比。 OS执行时编译器创建程序。 在这个比喻中,Pig是编译器,Hadoop是OS。 猪做的更多 - 它运行作业,监视它们等等。所以除了编译器之外,它可以被视为“shell”。 在我的理解中,从以下角度看,Pig不是100%编译器 - 它不会根据命令编译MR作业。 它传递有关应该对已存在 ...