设为首页 收藏本站
查看: 1146|回复: 0

[经验分享] hadoop faq

[复制链接]

尚未签到

发表于 2018-11-1 10:29:21 | 显示全部楼层 |阅读模式
Hadoop FAQ
  
1. What is Hadoop?
  Hadoop is a distributed computing platform written in Java. It incorporates features similar to those of the Google File System and of MapReduce. For some details, see HadoopMapReduce.
  
2. What platform does Hadoop run on?


  •   Java 1.6.x or higher, preferably from Sun -see HadoopJavaVersions

  •   Linux and Windows are the supported operating systems, but BSD, Mac OS/X, and OpenSolaris are known to work. (Windows requires the installation of Cygwin).

  2.1 Building / Testing Hadoop on Windows
  The Hadoop build on Windows can be run from inside a Windows (not cygwin) command prompt window.
  Whether you set environment variables in a batch file or in System->Properties->Advanced->Environment Variables, the following environment variables need to be set:
  

  
set ANT_HOME=c:\apache-ant-1.7.1
  
set JAVA_HOME=c:\jdk1.6.0.4
  
set PATH=%PATH%;%ANT_HOME%\bin
  

  then open a command prompt window, cd to your workspace directory (in my case it is c:\workspace\hadoop) and run ant. Since I am interested in running the contrib test cases I do the following:
  

  
ant -l build.log -Dtest.output=yes test-contrib
  

  other targets work similarly. I just wanted to document this because I spent some time trying to figure out why the ant build would not run from a cygwin command prompt window. If you are building/testing on Windows, and haven't figured it out yet, this should get you started.
  
3. How well does Hadoop scale?
  Hadoop has been demonstrated on clusters of up to 2000 nodes. Sort performance on 900 nodes is good (sorting 9TB of data on 900 nodes takes around 1.8 hours) and improving using these non-default configuration values:


  •   dfs.block.size = 134217728

  •   dfs.namenode.handler.count = 40

  •   mapred.reduce.parallel.copies = 20

  •   mapred.child.java.opts = -Xmx512m

  •   fs.inmemory.size.mb = 200

  •   io.sort.factor = 100

  •   io.sort.mb = 200

  •   io.file.buffer.size = 131072

  Sort performances on 1400 nodes and 2000 nodes are pretty good too - sorting 14TB of data on a 1400-node cluster takes 2.2 hours; sorting 20TB on a 2000-node cluster takes 2.5 hours. The updates to the above configuration being:


  •   mapred.job.tracker.handler.count = 60

  •   mapred.reduce.parallel.copies = 50

  •   tasktracker.http.threads = 50

  •   mapred.child.java.opts = -Xmx1024m

  
4. Do I have to write my application in Java?
  No. There are several ways to incorporate non-Java code.


  •   HadoopStreaming permits any shell command to be used as a map or reduce function.

  •   libhdfs, a JNI-based C API for talking to hdfs (only).

  •   Hadoop Pipes, a SWIG-compatible C++ API (non-JNI) to write map-reduce jobs.

  
5. How can I help to make Hadoop better?
  If you have trouble figuring how to use Hadoop, then, once you've figured something out (perhaps with the help of the mailing lists), pass that knowledge on to others by adding something to this wiki.
  If you find something that you wish were done better, and know how to fix it, read HowToContribute, and contribute a patch.
  
6. HDFS. If I add new data-nodes to the cluster will HDFS move the blocks to the newly added nodes in order to balance disk space utilization between the nodes?
  No, HDFS will not move blocks to new nodes automatically. However, newly created files will likely have their blocks placed on the new nodes.
  There are several ways to rebalance the cluster manually.


  • Select a subset of files that take up a good percentage of your disk space; copy them to new locations in HDFS; remove the old copies of the files; rename the new copies to their original names.
  • A simpler way, with no interruption of service, is to turn up the replication of files, wait for transfers to stabilize, and then turn the replication back down.
  • Yet another way to re-balance blocks is to turn off the data-node, which is full, wait until its blocks are replicated, and then bring it back again. The over-replicated blocks will be randomly removed from different nodes, so you really get them rebalanced not just removed from the current node.
  • Finally, you can use the bin/start-balancer.sh command to run a balancing process to move blocks around the cluster automatically. See

    •   HDFS User Guide: Rebalancer;

    •   HDFS Tutorial: Rebalancing;

    •   HDFS Commands Guide: balancer.


  
7. HDFS. What is the purpose of the secondary name-node?
  The term "secondary name-node" is somewhat misleading. It is not a name-node in the sense that data-nodes cannot connect to the secondary name-node, and in no event it can replace the primary name-node in case of its failure.
  The only purpose of the secondary name-node is to perform periodic checkpoints. The secondary name-node periodically downloads current name-node image and edits log files, joins them into new image and uploads the new image back to the (primary and the only) name-node. See User Guide.
  So if the name-node fails and you can restart it on the same physical node then there is no need to shutdown data-nodes, just the name-node need to be restarted. If you cannot use the old node anymore you will need to copy the latest image somewhere else. The latest image can be found either on the node that used to be the primary before failure if available; or on the secondary name-node. The latter will be the latest checkpoint without subsequent edits logs, that is the most recent name space modifications may be missing there. You will also need to restart the whole cluster in this case.
  
8. MR. What is the Distributed Cache used for?
  The distributed cache is used to distribute large read-only files that are needed by map/reduce jobs to the cluster. The framework will copy the necessary files from a url (either hdfs: or http:) on to the slave node before any tasks for the job are executed on that node. The files are only copied once per job and so should not be modified by the application.
  
9. MR. Can I write create/write-to hdfs files directly from my map/reduce tasks?
  Yes. (Clearly, you want this since you need to create/write-to files other than the output-file written out by OutputCollector.)
  Caveats:
  
  ${mapred.output.dir} is the eventual output directory for the job (JobConf.setOutputPath / JobConf.getOutputPath).

  ${taskid} is the actual>  

  With speculative-execution on, one could>  To get around this the framework helps the application-writer out by maintaining a special ${mapred.output.dir}/_${taskid} sub-dir for each task-attempt on hdfs where the output of the reduce task-attempt goes. On successful completion of the task-attempt the files in the ${mapred.output.dir}/_${taskid} (of the successful taskid only) are moved to ${mapred.output.dir}. Of course, the framework discards the sub-directory of unsuccessful task-attempts. This is completely transparent to the application.
  The application-writer can take advantage of this by creating any side-files required in ${mapred.output.dir} during execution of his reduce-task, and the framework will move them out similarly - thus you don't have to pick unique paths per task-attempt.
  Fine-print: the value of ${mapred.output.dir} during execution of a particular task-attempt is actually ${mapred.output.dir}/_{$taskid}, not the value set by JobConf.setOutputPath. So, just create any hdfs files you want in ${mapred.output.dir} from your reduce task to take advantage of this feature.
  The entire discussion holds true for maps of jobs with reducer=NONE (i.e. 0 reduces) since output of the map, in that case, goes directly to hdfs.
  
10. MR. How do I get each of my maps to work on one complete input-file and not allow the framework to split-up my files?

  Essentially a job's input is represented by the InputFormat(interface)/FileInputFormat(base>  For this purpose one would need a 'non-splittable' FileInputFormat i.e. an input-format which essentially tells the map-reduce framework that it cannot be split-up and processed. To do this you need your particular input-format to return false for the isSplittable call.
  E.g. org.apache.hadoop.mapred.SortValidator.RecordStatsChecker.NonSplitableSequenceFileInputFormat in src/test/org/apache/hadoop/mapred/SortValidator.java
  In addition to implementing the InputFormat interface and having isSplitable(...) returning false, it is also necessary to implement the RecordReader interface for returning the whole content of the input file. (default is LineRecordReader, which splits the file into separate lines)
  The other, quick-fix option, is to set mapred.min.split.size to large enough value.
  
11. Why I do see broken images in jobdetails.jsp page?
  In hadoop-0.15, Map / Reduce task completion graphics are added. The graphs are produced as SVG(Scalable Vector Graphics) images, which are basically xml files, embedded in html content. The graphics are tested successfully in Firefox 2 on Ubuntu and MAC OS. However for other browsers, one should install an additional plugin to the browser to see the SVG images. Adobe's SVG Viewer can be found at http://www.adobe.com/svg/viewer/install/.
  
12. HDFS. Does the name-node stay in safe mode till all under-replicated files are fully replicated?
  No. During safe mode replication of blocks is prohibited. The name-node awaits when all or majority of data-nodes report their blocks.
  Depending on how safe mode parameters are configured the name-node will stay in safe mode until a specific percentage of blocks of the system is minimally replicated dfs.replication.min. If the safe mode threshold dfs.safemode.threshold.pct is set to 1 then all blocks of all files should be minimally replicated.
  Minimal replication does not mean full replication. Some replicas may be missing and in order to replicate them the name-node needs to leave safe mode.
  Learn more about safe mode here.
  
13. MR. I see a maximum of 2 maps/reduces spawned concurrently on each TaskTracker, how do I increase that?
  Use the configuration knob: mapred.tasktracker.map.tasks.maximum and mapred.tasktracker.reduce.tasks.maximum to control the number of maps/reduces spawned simultaneously on a TaskTracker. By default, it is set to 2, hence one sees a maximum of 2 maps and 2 reduces at a given instance on a TaskTracker.
  You can set those on a per-tasktracker basis to accurately reflect your hardware (i.e. set those to higher nos. on a beefier tasktracker etc.).
  
14. MR. Submitting map/reduce jobs as a different user doesn't work.
  The problem is that you haven't configured your map/reduce system directory to a fixed value. The default works for single node systems, but not for "real" clusters. I like to use:
  

  

  
mapred.system.dir
  
/hadoop/mapred/system
  
The shared directory where MapReduce stores control files.
  

  

  

  Note that this directory is in your default file system and must be accessible from both the client and server machines and is typically in HDFS.
  
15. HDFS. How do I set up a hadoop node to use multiple volumes?
  Data-nodes can store blocks in multiple directories typically allocated on different local disk drives. In order to setup multiple directories one needs to specify a comma separated list of pathnames as a value of the configuration parameter dfs.data.dir. Data-nodes will attempt to place equal amount of data in each of the directories.
  The name-node also supports multiple directories, which in the case store the name space image and the edits log. The directories are specified via the dfs.name.dir configuration parameter. The name-node directories are used for the name space data replication so that the image and the log could be restored from the remaining volumes if one of them fails.
  
16. HDFS. What happens if one Hadoop client renames a file or a directory containing this file while another client is still writing into it?

  Starting with>  
17. HDFS. I want to make a large cluster smaller by taking out a bunch of nodes simultaneously. How can this be done?
  On a large cluster removing one or two data-nodes will not lead to any data loss, because name-node will replicate their blocks as long as it will detect that the nodes are dead. With a large number of nodes getting removed or dying the probability of losing data is higher.
  Hadoop offers the decommission feature to retire a set of existing data-nodes. The nodes to be retired should be included into the exclude file, and the exclude file name should be specified as a configuration parameter dfs.hosts.exclude. This file should have been specified during namenode startup. It could be a zero length file. You must use the full hostname, ip or ip:port format in this file. Then the shell command
  

  
bin/hadoop dfsadmin -refreshNodes
  

  should be called, which forces the name-node to re-read the exclude file and start the decommission process.
  Decommission does not happen momentarily since it requires replication of potentially a large number of blocks and we do not want the cluster to be overwhelmed with just this one job. The decommission progress can be monitored on the name-node Web UI. Until all blocks are replicated the node will be in "Decommission In Progress" state. When decommission is done the state will change to "Decommissioned". The nodes can be removed whenever decommission is finished.
  The decommission process can be terminated at any time by editing the configuration or the exclude files and repeating the -refreshNodes command.
  
18. What kind of hardware scales best for Hadoop?
  The short answer is dual processor/dual core machines with 4-8GB of RAM using ECC memory. Machines should be moderately high-end commodity machines to be most cost-effective and typically cost 1/2 - 2/3 the cost of normal production application servers but are not desktop-class machines. This cost tends to be $2-5K. For a more detailed discussion, see MachineScaling page.
  
19. Wildcard characters doesn't work correctly in FsShell.
  When you issue a command in FsShell, you may want to apply that command to more than one file. FsShell provides a wildcard character to help you do so. The * (asterisk) character can be used to take the place of any set of characters. For example, if you would like to list all the files in your account which begin with the letter x, you could use the ls command with the * wildcard:
  

  
bin/hadoop dfs -ls x*
  

  Sometimes, the native OS wildcard support causes unexpected results. To avoid this problem, Enclose the expression in Single or Double quotes and it should work correctly.
  

  
bin/hadoop dfs -ls 'in*'
  

  
20. How does GridGain compare to Hadoop?
  GridGain does not support data intensive jobs. For more details, see HadoopVsGridGain.
  
21. HDFS. Can I have multiple files in HDFS use different block>

  Yes. HDFS provides api to specify block>  
See FileSystem.create(Path, overwrite, bufferSize, replication, blockSize, progress)
  
22. Does HDFS make block boundaries between records?
  No, HDFS does not provide record-oriented API and therefore is not aware of records and boundaries between them.
  
23. How do Map/Reduce InputSplit's handle record boundaries correctly?
  It is the responsibility of the InputSplit's RecordReader to start and end at a record boundary. For SequenceFile's every 2k bytes has a 20 bytes sync mark between the records. These sync marks allow the RecordReader to seek to the start of the InputSplit, which contains a file, offset and length and find the first sync mark after the start of the split. The RecordReader continues processing records until it reaches the first sync mark after the end of the split. The first split of each file naturally starts immediately and not after the first sync mark. In this way, it is guaranteed that each record will be processed by exactly one mapper.
  Text files are handled similarly, using newlines instead of sync marks.
  
24. HDFS. What happens when two clients try to write into the same HDFS file?
  HDFS supports exclusive writes only.
  
When the first client contacts the name-node to open the file for writing, the name-node grants a lease to the client to create this file. When the second client tries to open the same file for writing, the name-node will see that the lease for the file is already granted to another client, and will reject the open request for the second client.
  
25. I have a new node I want to add to a running Hadoop cluster; how do I start services on just one node?
  This also applies to the case where a machine has crashed and rebooted, etc, and you need to get it to rejoin the cluster. You do not need to shutdown and/or restart the entire cluster in this case.
  First, add the new node's DNS name to the conf/slaves file on the master node.
  Then log in to the new slave node and execute:
  

  
$ cd path/to/hadoop
  
$ bin/hadoop-daemon.sh start datanode
  
$ bin/hadoop-daemon.sh start tasktracker
  

  
26. Is there an easy way to see the status and health of my cluster?
  There are web-based interfaces to both the JobTracker (MapReduce master) and NameNode (HDFS master) which display status pages about the state of the entire system. By default, these are located at http://job.tracker.addr:50030/ and http://name.node.addr:50070/.
  The JobTracker status page will display the state of all nodes, as well as the job queue and status about all currently running jobs and tasks. The NameNode status page will display the state of all nodes and the amount of free space, and provides the ability to browse the DFS via the web.
  You can also see some basic HDFS cluster health data by running:
  

  
$ bin/hadoop dfsadmin -report
  

  
27. How do I change final output file name with the desired name rather than in partitions like part-00000, part-00001 ?

  You can subclass the OutputFormat.java>  
28. How much network bandwidth might I need between racks in a medium>
  The true answer depends on the types of jobs you're running. As a back of the envelope calculation one might figure something like this:

  60 nodes total on 2 racks = 30 nodes per rack Each node might process about 100MB/sec of data In the case of a sort job where the intermediate data is the same>
  However, the above calculations are probably somewhat of an upper bound. A large number of jobs have significant data reduction during the map phase, either by some kind of filtering/selection going on in the Mapper itself, or by good usage of Combiners. Additionally, intermediate data compression can cut the intermediate data transfer by a significant factor. Lastly,>  So, the simple answer is that 4-6Gbps is most likely just fine for most practical jobs. If you want to be extra safe, many inexpensive switches can operate in a "stacked" configuration where the bandwidth between them is essentially backplane speed. That should scale you to 96 nodes with plenty of headroom. Many inexpensive gigabit switches also have one or two 10GigE ports which can be used effectively to connect to each other or to a 10GE core.
  29.How to limit Data node's disk usage?
  Use dfs.datanode.du.reserved configuration value in $HADOOP_HOME/conf/hdfs-site.xml for limiting disk usage.
  

  

  
dfs.datanode.du.reserved
  

  
182400
  
Reserved space in bytes per volume. Always leave this much space free for non dfs use.
  

  

  

  2.1 When writing a New InputFormat, what is the format for the array of string returned by InputSplit\#getLocations()?
  It appears that DatanodeID.getHost() is the standard place to retrieve this name, and the machineName variable, populated in DataNode.java\#startDataNode, is where the name is first set. The first method attempted is to get "slave.host.name" from the configuration; if that is not available, DNS.getDefaultHost is used instead.
  http://wiki.apache.org/hadoop/FAQ



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629272-1-1.html 上篇帖子: hadoop 增加数据节点 下篇帖子: Hadoop安装后的集群基准测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表