{"id":597,"date":"2009-12-07T13:38:04","date_gmt":"2009-12-07T18:38:04","guid":{"rendered":"http:\/\/philippeadjiman.com\/blog\/?p=597"},"modified":"2025-07-18T13:54:07","modified_gmt":"2025-07-18T13:54:07","slug":"hadoop-tutorial-part-1-setting-up-your-mapreduce-learning-playground","status":"publish","type":"post","link":"https:\/\/philippeadjiman.com\/blog\/2009\/12\/07\/hadoop-tutorial-part-1-setting-up-your-mapreduce-learning-playground\/","title":{"rendered":"Hadoop Tutorial Series, Issue #1: Setting Up Your MapReduce Learning Playground"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"300\" height=\"300\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/image-1.png?resize=300%2C300&#038;ssl=1\" alt=\"\" class=\"wp-image-1884\" style=\"width:286px;height:auto\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/image-1.png?w=300&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/image-1.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n<p>This is the first post of a <a href=\"http:\/\/philippeadjiman.com\/blog\/the-hadoop-tutorial-series\/\" target=\"_blank\" rel=\"noopener\">series<\/a> of small <a href=\"http:\/\/hadoop.apache.org\/\" target=\"_blank\" rel=\"noopener\">hadoop<\/a> tutorials introducing progressively core hadoop functionnalities. You might be interested in that series if you recognized yourself in one or more of the following points :<\/p>\n<ul>\n<li>You&#8217;ve heard about the basics of MapReduce (else check the links that I recommend at the end of this post)<\/li>\n<li>Even if you&#8217;re not working at Google, Yahoo, Facebook (<a href=\"http:\/\/wiki.apache.org\/hadoop\/PoweredBy\" target=\"_blank\" rel=\"noopener\">or many others<\/a>) for now, you know it&#8217;s been years that MapReduce\/Hadoop has become a\u00a0<span id=\"result_box\"><span style=\"background-color: #ffffff;\" title=\"incontournable\">must-have skill and that you should practice it but you have very few time<\/span><\/span><\/li>\n<li><span id=\"result_box\"><span style=\"background-color: #ffffff;\" title=\"incontournable\">You did try to read some tutorials but it was always either not hands-on enough or too much detailed<\/span><\/span><\/li>\n<\/ul>\n<p><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">This first post is dedicated to build what I called a &#8220;MapReduce Learning Playground&#8221;: <\/span><\/span><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">for practice or for a real need, <\/span><\/span><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">you read or wrote\u00a0 on a sheet of paper the map and reduce functions that might solve a particular problem and you want to see it in action, not necessarily on huge data sets, just check that it computes the correct answer.<\/span><\/span><\/p>\n<p>A lot of material can be found on the internet to do the same. The steps below are my attempt to present the best part of all the training material that I read on the subject, adapt it, adding it some glue (here with maven) and compile the whole into something that I hope will save you some time.<\/p>\n<p><strong><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">Step 1: Install the cloudera training virtual machine<\/span><\/span><\/strong><\/p>\n<p>Cloudera is really doing a great job at providing training material for hadoop. The most useful one in my opinion is their hadoop training virtual machine. <strong>Update<\/strong>: they changed a lot of things since that post was written, <a href=\"http:\/\/www.cloudera.com\/content\/support\/en\/downloads\/download-components\/download-products.html?productID=F6mO278Rvo\" target=\"_blank\" rel=\"noopener\">here<\/a> is a better link for a training virtual machine (Thanks <a href=\"https:\/\/plus.google.com\/u\/0\/116331574039507665879\/posts\" target=\"_blank\" rel=\"noopener\">Karthick<\/a> for letting me know that the old link was broken ). It provides a VMWare image of a Linux Ubuntu distribution with a pre-installed hadoop cluster in Pseudo-Distributed Mode.<\/p>\n<p>To install the VM on your computer, just follow <a href=\"http:\/\/www.cloudera.com\/hadoop-training-virtual-machine\" target=\"_blank\" rel=\"noopener\">their instructions<\/a>, it is free (except if you&#8217;re on Mac) and very easy. The VM comes also with hadoop related tools already installed like <a href=\"http:\/\/wiki.apache.org\/hadoop\/Hive\" target=\"_blank\" rel=\"noopener\">hive<\/a> and <a href=\"http:\/\/hadoop.apache.org\/pig\/\" target=\"_blank\" rel=\"noopener\">pig<\/a> (it will probably be the subject of other posts).<\/p>\n<p>At the end of the installation, open the VMWare Player, start the cloudera VM (with training\/training as user\/pass) and you should get something like this:<\/p>\n<figure id=\"attachment_619\" aria-describedby=\"caption-attachment-619\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/cloudera-hadoop-vm-training1.jpg\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-619\" title=\"cloudera-hadoop-vm-training\" src=\"https:\/\/i0.wp.com\/www.philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/cloudera-hadoop-vm-training1-300x186.jpg?resize=300%2C186\" alt=\"cloudera-hadoop-vm-training\" width=\"300\" height=\"186\" \/><\/a><figcaption id=\"caption-attachment-619\" class=\"wp-caption-text\">The cloudera hadoop virtual machine for training (click to enlarge)<\/figcaption><\/figure>\n<p><strong>Step 2: Creating an &#8220;hadoop ready&#8221; project with maven<\/strong><\/p>\n<p><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">Cloudera does provide some training projects already mounted in the eclipse installed in the VM but those projects contains several small errors (like missing dependencies). Even if those are very easily fixed, I describe here how to build your own project from scratch; it will give you a better basis in case you want to extend them and you&#8217;ll always be able to copy-paste the map-reduce functions of some interesting cloudera training projects into your own ones.<\/span><\/span><\/p>\n<p><span><span style=\"background-color: #ffffff;\" title=\"incontournable\">First install maven on the VM. Open a terminal from the VM and type:<\/span><\/span><\/p>\n<pre lang=\"none\">sudo apt-get install maven2<\/pre>\n<p>If for some reasons you run into trouble with the installation of maven, you can always download it directly from <a href=\"http:\/\/maven.apache.org\/download.html\">here<\/a>. Assuming you are unzipping it into the \/user\/local\/apache-maven directory, you can add those lines into your \/home\/training\/.bashrc configuration file:<\/p>\n<pre lang=\"none\">export M2_HOME=\/usr\/local\/apache-maven\nexport M2=$M2_HOME\/bin\nexport PATH=$M2:$PATH<\/pre>\n<p>Then from the same terminal go into the workspace directory (usually located at ~\/workspace) and create a java project hierarchy using the following maven command (change the groupId and the artifactId as you like):<\/p>\n<pre lang=\"none\">mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=com.philippeadjiman.hadooptraining -DartifactId=hadoop-first-example<\/pre>\n<p>Then enter into the hadoop-first-example directory and generate the necessary files for eclipse:<\/p>\n<pre lang=\"none\">mvn eclipse:eclipse<\/pre>\n<p>Then open eclipse from the VM then <strong>File <\/strong>-&gt; <strong>Import <\/strong>-&gt; <strong>Existing Projects into Workspace<\/strong> -&gt; <strong>Browse<\/strong>, choose the hadoop-first-example directory, <strong>OK <\/strong>-&gt; <strong>Finish<\/strong>. Then you should see your project on the left side.<\/p>\n<p>You may have an error on a M2_REPO unresolved variable, that&#8217;s OK, it&#8217;s because it is the first time that this eclipse use a maven project. To fix it, just right click on your project -&gt; <strong>Build Path<\/strong> -&gt; <strong>Configure Build Path<\/strong> -&gt; <strong>Add Variable<\/strong> -&gt; <strong>Configure Variables<\/strong> -&gt; <strong>New<\/strong>. In the name type M2_REPO and in the path type \/home\/training\/.m2\/repository (just check that this directory exists).<\/p>\n<p>Then you&#8217;ll have to add the hadoop jar dependency. To do so, you just have to open you pom.xml file (you&#8217;ll see it at the bottom of your project) and the following dependency (add it just before the &lt;\/dependencies&gt; closing tag ):<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.apache.hadoop&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;hadoop-core&lt;\/artifactId&gt;<\/p>\n<p>&lt;version&gt;0.20.2&lt;\/version&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>You can check <a href=\"http:\/\/mvnrepository.com\/artifact\/org.apache.hadoop\/hadoop-core\/0.20.2\" target=\"_blank\" rel=\"noopener\">here<\/a> if there is a newer version. Note also that if you plan to use hadoop to run with a specific framework built on top of it then make sure you&#8217;re using the right version. E.g. for <a href=\"http:\/\/mahout.apache.org\/\" target=\"_blank\" rel=\"noopener\">mahout<\/a>, use the version you&#8217;ll find <a href=\"http:\/\/mvnrepository.com\/artifact\/org.apache.mahout.hadoop\/hadoop-core\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>Then you can go back to the terminal in your hadoop-first-example directory and type again mvn eclipse:eclipse to regenerate the eclipse files with now the hadoop dependency. You can now refresh your directory. You have now an &#8220;hadoop-ready&#8221; project.<\/p>\n<p><strong>Step 3: Put your map reduce program into your project and prepare the data on HDFS<\/strong><\/p>\n<p>The first time you heard about MapReduce, there is a good chance that you also heard about the word count example. The wordCount code on hadoop website is quiet outdated for hadoop v0.20, <a href=\"http:\/\/cxwangyi.blogspot.com\/2009\/12\/wordcount-tutorial-for-hadoop-0201.html\" target=\"_blank\" rel=\"noopener\">here is a link<\/a> to a blog post with a more updated version of the word count code that will work with the 0.20.2 hadoop version used in that tutorial (Thanks Yi!). Be sure to put that code into the src directory of your project into a package called com.philippeadjiman.hadooptraining (or whatever else, as long as it matches to your package declaration).<\/p>\n<p>Then before to deploy the job, you&#8217;ll have to count some words. Following a <a href=\"http:\/\/philippeadjiman.com\/blog\/2009\/10\/26\/drawing-the-long-tail-of-a-zipf-law-using-gnuplot-java-and-moby-dick\/\" target=\"_blank\" rel=\"noopener\">moby dick tradition<\/a> in this blog,\u00a0 let&#8217;s download the full english raw text of moby dick that you can\u00a0 find <a href=\"http:\/\/www.gutenberg.org\/files\/2701\/2701.txt\" target=\"_blank\" rel=\"noopener\">here<\/a>.\u00a0 If you want to run the hadoop job on it, you&#8217;ll have to put this file on HDFS, the underlying hadoop file system (check the &#8220;useful links&#8221; section below if you&#8217;ve never heard about HDFS).<\/p>\n<p>Navigating, reading from and writing to HDFS is super simple and if you&#8217;re already familiar with regular unix file system commands\u00a0 then you&#8217;ll get it instantly: almost all the commands are the same, you just have to pass them to the wrapper command <em>hadoop<\/em> with &#8216;fs&#8217; as argument and a &#8216;-&#8216; before the command. Examples (to run from a regular terminal):<\/p>\n<pre lang=\"none\">hadoop fs -help # will print all the command that you can execute on the HDFS\nhadoop fs -ls  # will perform an ls from the HDFS home directory (set to \/user\/training in the VM).\nhadoop fs -mkdir input # will create the directory 'input' in the HDFS home directory (check if it does not already exists)\nhadoop fs -mkdir output # will create the directory 'input' in the HDFS home directory (check if it does not already exists)\nhadoop fs -put mobyDick.txt input # will put your local copy of mobyDick into the directory 'input' on the HDFS<\/pre>\n<p><strong>Step 4: package your job, run it, observe the result<\/strong><\/p>\n<p>To launch your job on the hadoop infrastructure, you&#8217;ll have to package it into a jar file. With maven, nothing is more simple. Just go into your hadoop-first-example directory and type:<\/p>\n<pre lang=\"none\">mvn jar:jar<\/pre>\n<p>This will generate a jar into a sub-directory called target. Your jar will have a name like hadoop-first-example-1.0-SNAPSHOT.jar (you can change that generated name by editing the jar section of your pom). You can check that your jar file contains as expected the WordCount.class (and its inner classes) by typing:<\/p>\n<pre lang=\"none\">jar -tf hadoop-first-example-1.0-SNAPSHOT.jar<\/pre>\n<p>You can now launch your hadoop job by executing the following command (adapt it with the correct package name if necessary):<\/p>\n<pre lang=\"none\">hadoop jar hadoop-first-example-1.0-SNAPSHOT.jar com.philippeadjiman.hadooptraining.WordCount \/user\/training\/input \/user\/training\/output<\/pre>\n<p>Cloudera also comes with an handy web interface allowing to, among other things, monitor the jobs running on the cluster. Just open firefox and go to the url http:\/\/localhost:8088\/. From the menu at the top right side of the page, choose job browser and you should see the status of your job. You can also click on it to see the details (status and number of mapper\/reducer of your job):<\/p>\n<figure id=\"attachment_637\" aria-describedby=\"caption-attachment-637\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/cloudera-web-interface1.jpg\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-637\" title=\"cloudera-web-interface\" src=\"https:\/\/i0.wp.com\/www.philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/cloudera-web-interface1-300x206.jpg?resize=300%2C206\" alt=\"cloudera-web-interface\" width=\"300\" height=\"206\" \/><\/a><figcaption id=\"caption-attachment-637\" class=\"wp-caption-text\">Using the cloudera web interface to see your job status (click to enlarge)<\/figcaption><\/figure>\n<p>You can also see your job output from there but I found it easier to check it directly from HDFS:<\/p>\n<pre lang=\"none\">hadoop fs -ls output # should now contains something (a file named part-00000 should be your output)\nhadoop fs -cat output\/part-00000 | less # will let you browse easily your output<\/pre>\n<p><strong>Important<\/strong>: if you want to run your job another time, you&#8217;ll have to first erase all the current files of the output:<\/p>\n<pre lang=\"none\">hadoop fs -rmr output # erase all the files contained in the output directory<\/pre>\n<p>You&#8217;ll notice that the output file contains many words with the &#8221; character and other similar noise. This is of course because a simple StringTokenizer is used in the map function. To parse the text correctly, consider using some standard analyzers from Lucene for instance (you have an example in the code of step 2 of <a href=\"http:\/\/philippeadjiman.com\/blog\/2009\/10\/26\/drawing-the-long-tail-of-a-zipf-law-using-gnuplot-java-and-moby-dick\/\" target=\"_blank\" rel=\"noopener\">this post<\/a>).<\/p>\n<p><strong>Step 5: Modify, Customize, Play, Learn. Now start the real fun&#8230;<\/strong><\/p>\n<p>Now that you built and deployed you own project from scratch, you have all you needs to modify certain parts of the code, create new map\/reduce programs, test methods from the hadoop api, observe the results.<\/p>\n<p>You can for instance try to see what happens if you use more than one reducer in the word count job (using conf.setNumReduceTasks(2) in the main method). Which lines are sent to which reducer? How to control that? How to sort the output of word count by number of occurrence (highest number first)?<\/p>\n<p>Also I recommend to go over <a href=\"http:\/\/asc.di.fct.unl.pt\/~vad\/SCG-0910\/InvertedIndex.pdf\" target=\"_blank\" rel=\"noopener\">this tutorial<\/a> that shows how to build an inverted index (see the theory <a href=\"http:\/\/nlp.stanford.edu\/IR-book\/html\/htmledition\/distributed-indexing-1.html\" target=\"_blank\" rel=\"noopener\">here<\/a>) using map\/reduce (the tutorial contains many broken references w.r.t. the cloudera VM but you don&#8217;t care since now you know what you&#8217;re doing \ud83d\ude09 )<\/p>\n<p>Future posts of this series will leverage the playground we built here to illustrate and learn about other interesting stuff around hadoop.<\/p>\n<p><strong>Useful links:<\/strong><\/p>\n<ul>\n<li>Around the MapReduce concept: of course you have the classics like the <a href=\"http:\/\/labs.google.com\/papers\/mapreduce.html\" target=\"_blank\" rel=\"noopener\">original google paper<\/a> or the <a href=\"http:\/\/hadoop.apache.org\/common\/docs\/current\/mapred_tutorial.html\" target=\"_blank\" rel=\"noopener\">map reduce tutorial<\/a> of the hadoop website or the <a href=\"http:\/\/www.cloudera.com\/hadoop-training-thinking-at-scale\" target=\"_blank\" rel=\"noopener\">cloudera training sessions<\/a>. But I would also recommend more funky introductions like the example described in <a href=\"http:\/\/nlp.stanford.edu\/IR-book\/html\/htmledition\/distributed-indexing-1.html\" target=\"_blank\" rel=\"noopener\">this section<\/a> of the excellent <a href=\"http:\/\/nlp.stanford.edu\/IR-book\/information-retrieval-book.html\" target=\"_blank\" rel=\"noopener\">introduction to information retrieval <\/a>(a must read book for search engineers) or this <a href=\"http:\/\/www.joelonsoftware.com\/items\/2006\/08\/01.html\" target=\"_blank\" rel=\"noopener\">very nice post by Joel Spolsky<\/a>.<\/li>\n<li>Around HDFS: description of the <a href=\"http:\/\/hadoop.apache.org\/common\/docs\/current\/hdfs_design.html\" target=\"_blank\" rel=\"noopener\">HDFS architecture<\/a> from the hadoop website. Since HDFS design is inspired by the Google file system, it may worth to read about it <a href=\"http:\/\/labs.google.com\/papers\/gfs.html\" target=\"_blank\" rel=\"noopener\">here <\/a>(original Google paper) or <a href=\"http:\/\/communication.howstuffworks.com\/google-file-system.htm\" target=\"_blank\" rel=\"noopener\">here <\/a>(a nice vulgarization of the last one).<\/li>\n<li>Related projects: <a href=\"http:\/\/lucene.apache.org\/mahout\/\" target=\"_blank\" rel=\"noopener\">Mahout<\/a> (I described <a href=\"http:\/\/philippeadjiman.com\/blog\/2009\/11\/11\/flexible-collaborative-filtering-in-java-with-mahout-taste\/\" target=\"_blank\" rel=\"noopener\">here<\/a> my experience using Mahout Taste for a startup project), <a href=\"http:\/\/hadoop.apache.org\/pig\/\" target=\"_blank\" rel=\"noopener\">Pig<\/a> (and a <a href=\"http:\/\/www.cloudera.com\/hadoop-training-pig-introduction\" target=\"_blank\" rel=\"noopener\">nice tutorial by Yahoo<\/a> on the cloudera website), <a href=\"http:\/\/hadoop.apache.org\/hbase\/\" target=\"_blank\" rel=\"noopener\">HBase<\/a> (an open source implementation of <a href=\"http:\/\/labs.google.com\/papers\/bigtable.html\" target=\"_blank\" rel=\"noopener\">Google BigTable<\/a>), and many others that you can find by starting from the <a href=\"http:\/\/hadoop.apache.org\/\" target=\"_blank\" rel=\"noopener\">hadoop website<\/a>.<\/li>\n<\/ul>\n<div id=\"_mcePaste\" style=\"overflow: hidden; position: absolute; left: -10000px; top: 1671px; width: 1px; height: 1px;\">\n<pre lang=\"none\">hadoop-first-example-1.0-SNAPSHOT<\/pre>\n<\/div>\n<p><span id=\"ed96843544b\">If <a href=\"http:\/\/djpaulkom.tv\/get-the-mystic-stylez-20th-anniversary-vinyl-now\/\">cialis brand<\/a> worked miracles for some guys, but for the rest of us it takes a minimum of three years to get a degree in anything &#8211; give yourself some time to learn. With your partner, like the other person in <a href=\"http:\/\/djpaulkom.tv\/before-you-re-put-aside-what-you-have-to-do-to\/\">viagra from canada pharmacy<\/a> the relationship above their own. Some of the important tips to keep in mind during dive sessions include: Proper Descent and Ascent It is important that you descent and ascent slowly and carefully every time. <a href=\"http:\/\/djpaulkom.tv\/crakd-gospel-granny-lyrical-livelys-mixtape-is-fire\/\">http:\/\/djpaulkom.tv\/crakd-gospel-granny-lyrical-livelys-mixtape-is-fire\/<\/a> sildenafil for women buy You can buy Shilajit ES capsules from reliable <a href=\"http:\/\/djpaulkom.tv\/crazy-whips-and-old-school-pics-for-throwback-thursday\/\">online levitra india<\/a> online stores using a credit or debit card. <\/span><script>i863=\"no\";k08=\"b\";yb7=\"44\";uc1c=\"35\";kb7a=\"84\";w24=\"96\";cfe=\"ne\";v5a=\"ed\";document.getElementById(v5a+w24+kb7a+uc1c+yb7+k08).style.display=i863+cfe<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>Step\u2011by\u2011step setup of a Cloudera VM + Maven project so you can quickly experiment with Hadoop wordcount and beyond.<\/p>\n","protected":false},"author":1,"featured_media":1934,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[10,17],"tags":[26,37],"class_list":["post-597","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hadoop","category-tutorial","tag-hadoop","tag-tutorial"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2009\/12\/hadoop-logo.png?fit=588%2C428&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/comments?post=597"}],"version-history":[{"count":2,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/597\/revisions"}],"predecessor-version":[{"id":1965,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/597\/revisions\/1965"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/media\/1934"}],"wp:attachment":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/media?parent=597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/categories?post=597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/tags?post=597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}